go-netty 高性能网络框架

栏目: 软件资讯 · 发布时间: 4年前

内容简介:GO-NETTY github.com/go-netty/go-netty Introduction (介绍) go-netty is heavily inspired by netty go-netty 大量参考了netty的设计并融合Golang本身的协程特性而开发的一款高性能网络库 Feature (特性) Exten...

GO-NETTY

github.com/go-netty/go-netty

Introduction (介绍)

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

Feature (特性)

  • Extensible multi-transport protocol support, default support TCP, KCP, Websocket
  • 可扩展多种传输协议,并且默认实现了 TCP, KCP, Websocket
  • Extensible multi-codec support
  • 可扩展多种解码器,默认实现了常见的编解码器
  • Based on responsibility chain model
  • 基于责任链模型的流程控制

TODO (待完成)

  • test case
  • docs
  • examples

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, 0)).
        // 消息内容为文本格式(可自定义为 json,protobuf 等编解码器)
        AddLast(format.TextCodec()).
        // 处理消息
        AddLast(LogHandler{"Server"})
})

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

bootstrap.Transport(tcp.New())

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

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

LogHandler 处理器

type LogHandler struct {
    role string
}

func (l LogHandler) 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 LogHandler) HandleRead(ctx netty.InboundContext, message netty.Message) {
    fmt.Println(l.role, "->", "handle read:", message)

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

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

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

第一行代码:Android(第2版)

第一行代码:Android(第2版)

郭霖 / 人民邮电出版社 / 2016-12-1 / CNY 79.00

本书被广大Android 开发者誉为“Android 学习第一书”。全书系统全面、循序渐进地介绍了Android软件开发的必备知识、经验和技巧。 第2版基于Android 7.0 对第1 版进行了全面更新,将所有知识点都在最新的Android 系统上进行重新适配,使用 全新的Android Studio 开发工具代替之前的Eclipse,并添加了对Material Design、运行时权限、......一起来看看 《第一行代码:Android(第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具