GO-NETTY
中文介绍
Introduction
go–netty is heavily inspired by netty
Feature
- Extensible transport support, default support TCP, UDP, QUIC, KCP, Websocket
- Extensible codec support
- Based on responsibility chain model
- Zero-dependency
Documentation
- GoDoc
Examples
Quick Start
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) }
use Netcat to send message
$ echo -n -e \"Hello Go-Netty\\nhttps://g*o-ne*tt*y.com\\n\" | nc 127.0.0.1 9527 Hello I\'m go-netty Hello Go-Netty -> HELLO GO-NETTY https://g*o-ne*tt*y.com -> HTTPS://G*O-*NETTY*.COM
