go netty
1.0.0
중국어 介绍
go-netty는 netty에서 많은 영감을 받았습니다.
package main
import (
"fmt"
"strings"
"github.com/go-netty/go-netty"
"github.com/go-netty/go-netty/codec/format"
"github.com/go-netty/go-netty/codec/frame"
)
func main () {
// child pipeline initializer
var childInitializer = func ( channel netty. Channel ) {
channel . Pipeline ().
// the maximum allowable packet length is 128 bytes,use n to split, strip delimiter
AddLast ( frame . DelimiterCodec ( 128 , " n " , true )).
// convert to string
AddLast ( format . TextCodec ()).
// LoggerHandler, print connected/disconnected event and received messages
AddLast ( LoggerHandler {}).
// UpperHandler (string to upper case)
AddLast ( UpperHandler {})
}
// create bootstrap & listening & accepting
netty . NewBootstrap ( netty . WithChildInitializer ( childInitializer )).
Listen ( ":9527" ). Sync ()
}
type LoggerHandler struct {}
func ( LoggerHandler ) HandleActive ( ctx netty. ActiveContext ) {
fmt . Println ( "go-netty:" , "->" , "active:" , ctx . Channel (). RemoteAddr ())
// write welcome message
ctx . Write ( "Hello I'm " + "go-netty" )
}
func ( LoggerHandler ) HandleRead ( ctx netty. InboundContext , message netty. Message ) {
fmt . Println ( "go-netty:" , "->" , "handle read:" , message )
// leave it to the next handler(UpperHandler)
ctx . HandleRead ( message )
}
func ( LoggerHandler ) HandleInactive ( ctx netty. InactiveContext , ex netty. Exception ) {
fmt . Println ( "go-netty:" , "->" , "inactive:" , ctx . Channel (). RemoteAddr (), ex )
// disconnected,the default processing is to close the connection
ctx . HandleInactive ( ex )
}
type UpperHandler struct {}
func ( UpperHandler ) HandleRead ( ctx netty. InboundContext , message netty. Message ) {
// text to upper case
text := message .( string )
upText := strings . ToUpper ( text )
// write the result to the client
ctx . Write ( text + " -> " + upText )
}
Netcat
사용하여 메시지 보내기
$ echo -n -e " Hello Go-Nettynhttps://go-netty.comn " | nc 127.0.0.1 9527
Hello I ' m go-netty
Hello Go-Netty -> HELLO GO-NETTY
https://go-netty.com -> HTTPS://GO-NETTY.COM