Ticketing
文档

帧结构

用于承载 Raft RPC 的带长度前缀的二进制分帧。 与客户端协议以 \n 结尾的帧不同,这里先发送长度,再读取相应字节数的数据。 一条连接上的请求-响应对是顺序往返的,并且发起拨号的一方始终是请求方

请求(拨号方 → 接收方)

结构refresh

响应(接收方 → 拨号方)

结构refresh
字段大小内容
tagu8RPC 类型 —— 见 RPC 类型(仅请求中有)
lenu32,大端序后续 payload 的字节长度
payloadlen 字节postcard 格式序列化的 openraft 类型

连接管理规则

  • len 上限为 64 MiB(接收时校验)。超出限制的帧、格式错误的帧、未知的 tag,或 Raft 处理错误,都会通过关闭连接来处理 —— 拨号方(openraft) 会重新连接并重试。
  • 拨号方对每个目标节点复用同一条连接。发生 I/O 错误,或往返过程中途被 取消时,该连接会被丢弃,下一次调用会拨打一条新连接 —— 半读状态的流永远 不会被以错位状态复用。

术语

  • 长度前缀 (length-prefix) —— 先发送正文长度,再精确读取相应字节数的 分帧方式。无需像 \n 这样的分隔符,因此可以原样承载任意二进制数据。
  • 序列化 (serialization) —— 把内存中的结构体转换为适合传输的字节序列。
  • RPC(远程过程调用) —— 通过网络调用另一台服务器上的函数的请求-响应对, 就像调用本地函数一样。