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) }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
利用NAT让业务变得更简单
利用NAT让业务变得更简单 一、背景: 在对集群服务器进行运维时,我们的运维同学往往会对着数量众多的服务器默默流泪,那有没有一些方式让我们运维同学少掉头发呢?答案是有的哦。NAT网关了解下! 二、业务价值: NAT网关(NAT Gateway)是一款企业级的公网网关,提供NAT代理(SNAT和DNAT)、高达10Gbps级别转发能力以及跨可用区的容灾能力。 NAT网关作为一个网关设备,需要绑定公网IP才能正常工作。创建NAT网关后,您可以为NAT网关绑定弹性公网IP(EIP)。 NAT网关支持SNAT和DNAT功能。• SNAT可以为VPC内无公网IP的ECS实例提供访问互联网的代理服务。• DNAT可以将NAT网关上的公网IP映射给ECS实例使用,使ECS实例能够提供互联网服务。 您可以使用共享带宽和共享流量包来降低NAT网关的公网成本。• 共享带宽提供地域级带宽共享和复用功能。您可以将绑定到NAT网关的EIP加入到共享带宽实例中,使EIP复用共享带宽中的带宽。详细信息,请参见加入共享带宽。• 共享流量包是一款流量套餐产品,使用方便,价格实惠,共享流量包会自动抵扣按流量计费的云服务器...
- 下一篇
YurunHttp v3.4.0 发布,支持 Http2 全双工通信
YurunHttp 是开源的 PHP HTTP 类库,支持链式操作,简单易用。 支持所有常见的 GET、POST、PUT、DELETE、UPDATE 等请求方式,支持 Http2、WebSocket、浏览器级别 Cookies 管理、上传下载、设置和读取 header、Cookie、请求参数、失败重试、限速、代理、证书等。 git 仓库中 examples 目录里是示例代码! 更新日志(v3.4.0): 新增 新增支持全双工的 Http2 客户端 新增 Attributes 属性的常量定义类,所有 Attribute 操作使用该类中的常量作为名称 Swoole Handler 引入连接管理器 新增默认缺省的默认 UserAgent (可在每个请求中指定,或设置全局Attribute::USER_AGENT用以代替默认的 UA) 支持发送 Http2 请求不调用 recv() 优化 Request对象中的Attribute缺省情况下,会从YurunHttp类中获取 重构 Swoole Handler Http2 全双工用法 该用法仅支持 Swoole $uri = new Uri('...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能