前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解 tRPC 协议帧格式

图解 tRPC 协议帧格式

原创
作者头像
Martin Hong
发布2024-05-14 21:08:45
1310
发布2024-05-14 21:08:45

tRPC-Go 中的 codec 模块的 FrameHeadconstruct 方法实现了 tRPC 协议栈的构建过程:

代码语言:go
复制
// construct 构造整个帧的二进制数据
func (h *FrameHead) construct(header, body []byte) ([]byte, error) {
   headerLen := len(header)
   if headerLen > math.MaxUint16 {
      return nil, errHeadOverflowsUint16
   }
   // ... 忽略具体代码
   return buf, nil
}

图形化,则整个帧的结构设计为:

tRPC 协议帧格式
tRPC 协议帧格式

其中:

  • 2 字节魔数:固定为 2352。一般自定义协议中会用到魔数,常见也都是 2 个字节:用于快速识别字节流是否是程序能够处理的,能处理才进行后面的 耗时 业务操作,如果不能处理,尽快执行失败,断开连接等操作。
  • 2 字节头部长度:限制了协议的请求头不能超过 64KB,所以使用中,如果有大量透传字段的业务场景,需要注意这个限制。tRPC 协议头部的格式使用 pb 定义,对应生成的 golang 结构体为 trpc.RequestProtocol
  • 4 字节帧的总长度: 源码中默认的最大长度为 codec.DefaultMaxFrameSize = 10*1024*1024,即 10MB,但是因为是公开访问的变量,应用可以把这个数值改大,以支持大小超过 10MB 的帧,但是估计实际中,没有多少业务会有这个需要。另外虽然可以调大 DefaultMaxFrameSize 的值,但是也不能突破 32 位长度,亦即 4GB,相信这种可能性几乎没有。

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档