发布一款高性能网络框架 go-netty

2019-12-13 14:57:07 +08:00
 limpo

GO-NETTY

Introduction (介绍)

go-netty 大量参考了 netty 的设计并融合 Golang 本身的协程特性而开发的一款高性能网络库

Feature (特性)

Documentation (文档)

GoDoc

Examples (示例)

Usage (使用)

创建 bootstrap, 用于提供服务或者对外建立连接

var bootstrap = netty.NewBootstrap()

配置服务连接的处理器 (同样还有一个 ClientInitializer 对应客户端连接处理器配置)

bootstrap.ChildInitializer(func(channel netty.Channel) {
    channel.Pipeline().
        // 按照自定义协议解码帧( 2 字节的长度字段)
        AddLast(frame.LengthFieldCodec(binary.LittleEndian, 1024, 0, 2, 0, 2)).
        // 消息内容为文本格式(可自定义为 json,protobuf 等编解码器)
        AddLast(format.TextCodec()).
        // 处理消息
        AddLast(EchoHandler{"Server"})
})

配置服务器(客户端)所使用的传输协议

bootstrap.Transport(tcp.New())

开始监听端口并开始提供服务,直到收到指定信号后退出

bootstrap.Listen("tcp://0.0.0.0:6565").RunForever(os.Kill, os.Interrupt)

LogHandler 处理器

type EchoHandler struct {
    role string
}

func (l EchoHandler) HandleActive(ctx netty.ActiveContext) {
    fmt.Println(l.role, "->", "active:", ctx.Channel().RemoteAddr())

    // 给对端发送一条消息,将进入如下流程(视编解码配置)
    // Text -> TextCodec -> LengthFieldCodec   -> Channel.Write
    // 文本     文本编码      组装协议格式(长度字段)     网络发送
    ctx.Write("Hello I'm " + l.role)

    // 向后续的 handler 传递控制权
    // 如果是最后一个 handler 或者需要中断请求可以不用调用
    ctx.HandleActive()
}

func (l EchoHandler) HandleRead(ctx netty.InboundContext, message netty.Message) {
    fmt.Println(l.role, "->", "handle read:", message)

    // 向后续的 handler 传递控制权
    // 如果是最后一个 handler 或者需要中断请求可以不用调用
    ctx.HandleRead(message)
}

func (l EchoHandler) HandleInactive(ctx netty.InactiveContext, ex netty.Exception) {
    fmt.Println(l.role, "->", "inactive:", ctx.Channel().RemoteAddr(), ex)

    // 向后续的 handler 传递控制权
    // 如果是最后一个 handler 或者需要中断请求可以不用调用
    ctx.HandleInactive(ex)
}
4294 次点击
所在节点    Go 编程语言
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX