go-netty 高性能网络框架

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

内容简介: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)
}

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

查看所有标签

猜你喜欢:

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

从界面到网络空间

从界面到网络空间

(美)海姆 / 金吾伦/刘钢 / 上海科技教育出版社 / 2000-7 / 16.40元

计算机急剧改变了20世纪的生活。今天,我们凭借遍及全球的计算机网络加速了过去以广播、报纸和电视形式进行的交流。思想风驰电掣般在全球翻飞。仅在角落中潜伏着已完善的虚拟实在。在虚拟实在吕,我们能将自己沉浸于感官模拟,不仅对现实世界,也对假想世界。当我们开始在真实世界与虚拟世界之间转换时,迈克尔·海姆问,我们对实在的感觉如何改变?在〈从界面到网络空间〉中,海姆探讨了这一问题,以及信息时代其他哲学问题。他......一起来看看 《从界面到网络空间》 这本书的介绍吧!

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

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具