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)
}

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

查看所有标签

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

深入浅出Web设计(中文版)

深入浅出Web设计(中文版)

(美)瓦特罗尔、(美)西罗托 / O'Reilly Taiwan公司 / 东南大学出版社 / 2010-11 / 99.00元

你将从《深入浅出Web设计(中文版)》学到什么?你曾经希望看看书就能学到真正的网站设计吗?曾经想过该如何同时达成让网站看起来美观,又能有效率地沟通信息,还要通过可访问性与可用性的策略吗?《深入浅出Web设计》正是精通上述主题的秘笈。我们将学到如何设计一个绝佳、用户友好的网站,上谈客户需求,下说手绘分镜表,乃至完成在线所需的HTML与css主文件……而且会有一个真正可以运作的网站!一起来看看 《深入浅出Web设计(中文版)》 这本书的介绍吧!

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

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

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

HEX CMYK 互转工具