内容简介:Teleport v2.5(简称tp v2.5)今日发布啦!它是一个通用、高效、灵活的TCP Socket框架。可用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。这次升级新增了自定义通信协议、包大小限...
Teleport v2.5(简称tp v2.5)今日发布啦!它是一个通用、高效、灵活的TCP Socket框架。可用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。这次升级新增了自定义通信协议、包大小限制等一些新特性,并作了一系列深度优化。
tp v2.5 特性变化:
【新增】支持设置读取包的大小限制(如果超出则断开连接)
【新增】支持定制通信协议
【升级】支持插件机制,可以自定义认证、心跳、微服务注册中心、统计信息插件等
【优化】无论服务器或客户端,均支持优雅重启、优雅关闭
支持实现反向代理功能
【优化】日志信息详尽,支持打印输入、输出消息的详细信息(状态码、消息头、消息体)
服务器和客户端之间对等通信,两者API方法基本一致
底层通信数据包包含Header和Body两部分
支持单独定制Header和Body编码类型,例如JSON Protobuf string
Body支持gzip压缩
Header包含状态码及其描述文本
支持推、拉、回复等通信模式
支持设置慢操作报警阈值
底层连接使用I/O缓冲区
端点间通信使用I/O多路复用技术
teleport
tp v2.5 升级详情:
一、增加对自定义通信协议的支持,通过实现socket.Protocol接口来定制:
// Protocol socket communication protocol type Protocol interface { // WritePacket writes header and body to the connection. WritePacket( packet *Packet, destWriter *utils.BufioWriter, tmpCodecWriterGetter func(string) (*TmpCodecWriter, error), isActiveClosed func() bool, ) error // ReadPacket reads header and body from the connection. ReadPacket( packet *Packet, bodyAdapter func() interface{}, srcReader *utils.BufioReader, codecReaderGetter func(byte) (*CodecReader, error), isActiveClosed func() bool, checkReadLimit func(int64) error, ) error }
然后,可以通过以下任意方法指定自己的通信协议:
func SetDefaultProtocol(socket.Protocol) func (*Peer) ServeConn(conn net.Conn, protocol ...socket.Protocol) Session func (*Peer) DialContext(ctx context.Context, addr string, protocol ...socket.Protocol) (Session, error) func (*Peer) Dial(addr string, protocol ...socket.Protocol) (Session, error) func (*Peer) Listen(protocol ...socket.Protocol) error
二、新增限制通信包大小
在读取包时可以限制包的大小,如果超出最大值则会主动断开连接。全局设置函数:
func SetReadLimit(maxPacketSize int64)
三、升级插件接口
插件返回值由以前的error改为tp.Xerror,从而用户可以灵活地在插件中定义错误码和错误描述;
增加更多、更细、更合理的插件位置
插件执行出错时的日志格式更加清晰整洁
// Interfaces about plugin. type ( Plugin interface { Name() string } PostRegPlugin interface { Plugin PostReg(*Handler) Xerror } PostDialPlugin interface { Plugin PostDial(ForeSession) Xerror } PostAcceptPlugin interface { Plugin PostAccept(ForeSession) Xerror } PreWritePullPlugin interface { Plugin PreWritePull(WriteCtx) Xerror } PostWritePullPlugin interface { Plugin PostWritePull(WriteCtx) Xerror } PreWriteReplyPlugin interface { Plugin PreWriteReply(WriteCtx) Xerror } PostWriteReplyPlugin interface { Plugin PostWriteReply(WriteCtx) Xerror } PreWritePushPlugin interface { Plugin PreWritePush(WriteCtx) Xerror } PostWritePushPlugin interface { Plugin PostWritePush(WriteCtx) Xerror } PreReadHeaderPlugin interface { Plugin PreReadHeader(ReadCtx) Xerror } PostReadPullHeaderPlugin interface { Plugin PostReadPullHeader(ReadCtx) Xerror } PreReadPullBodyPlugin interface { Plugin PreReadPullBody(ReadCtx) Xerror } PostReadPullBodyPlugin interface { Plugin PostReadPullBody(ReadCtx) Xerror } PostReadPushHeaderPlugin interface { Plugin PostReadPushHeader(ReadCtx) Xerror } PreReadPushBodyPlugin interface { Plugin PreReadPushBody(ReadCtx) Xerror } PostReadPushBodyPlugin interface { Plugin PostReadPushBody(ReadCtx) Xerror } PostReadReplyHeaderPlugin interface { Plugin PostReadReplyHeader(ReadCtx) Xerror } PreReadReplyBodyPlugin interface { Plugin PreReadReplyBody(ReadCtx) Xerror } PostReadReplyBodyPlugin interface { Plugin PostReadReplyBody(ReadCtx) Xerror } )
四、更多细节优化
运行日志中打印增加包序号seq,便于debug
当收到不支持的包类型时,断开连接并打印包详情
tp.PullCmd增加func (c *PullCmd) Result() (interface{}, Xerror)方法,便于使用Session.GoPull方法进行并发请求
升级平滑重启与关闭功能
增加对并发资源的控制,防止内存资源耗尽
一些代码块的细节优化
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上所述就是小编给大家介绍的《Teleport v2.5发布,支持限制包大小与自定义包协议》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- ReactNative字体大小不随系统字体大小变化而变化
- JVM 参数最佳实践:元空间的初始大小和最大大小
- 原 荐 java计算对象占用内存大小:lucene专用于计算堆内存占用大小的工具类
- 获取网络图片的大小
- 获取网络图片的大小
- 减小APK大小
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Book of CSS3
Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95
CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!