Teleport v2.5发布,支持限制包大小与自定义包协议

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

内容简介: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 v2.5发布,支持限制包大小与自定义包协议

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)

三、升级插件接口

  1. 插件返回值由以前的error改为tp.Xerror,从而用户可以灵活地在插件中定义错误码和错误描述;

  2. 增加更多、更细、更合理的插件位置

  3. 插件执行出错时的日志格式更加清晰整洁

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

四、更多细节优化

  1. 运行日志中打印增加包序号seq,便于debug

  2. 当收到不支持的包类型时,断开连接并打印包详情

  3. tp.PullCmd增加func (c *PullCmd) Result() (interface{}, Xerror)方法,便于使用Session.GoPull方法进行并发请求

  4. 升级平滑重启与关闭功能

  5. 增加对并发资源的控制,防止内存资源耗尽

  6. 一些代码块的细节优化


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《Teleport v2.5发布,支持限制包大小与自定义包协议》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

The Book of CSS3

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》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

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

RGB CMYK 互转工具