协议

rpcx的请求和响应使用相同的消息格式。

一个消息包含:

  1. 头部:4字节
  2. 消息ID:8字节
  3. 总大小:4字节,不包含头部大小和本身,uint32类型
  4. 服务路径大小:4字节,uint32类型
  5. 服务路径:UTF-8字符串
  6. 消息方法大小:4字节,uint32类型
  7. 消息方法:UTF-8字符串
  8. 元数据大小:4字节,uint32类型
  9. 元数据:格式:size key1 string size value1 string,可以包含多个e=key,value
  10. 负载大小:4字节,uint32类型
  11. 负载:字节切片

#4+#6+#8+#10 + (4 + 4 + 4 + 4)必须等于#3

servicePathserviceMethod和元数据中的key value

必须是UTF-8字符串。

rpcx使用元素大小+元素的格式来定义一个元素。这类似于TLV,但是没有使用类型因为元素类型是UTF-8字符串。

size使用大段格式(int、int64、uint32等)

  1. 第一个字节必须是0x08。它是一个魔术数字。
  2. 第二个字节是version,当前版本是0。
  3. 消息类型可以是: 0:请求 1:响应
  4. 心跳:bool类型。该消息是否是心跳消息
  5. 单向:bool类型。是否需要响应。
  6. 压缩类型: 0:不压缩 1:Gzip压缩
  7. 消息状态类型:指明响应是一个错误消息或者正常消息。
  8. 序列化类型: 0:使用原始字节 1:JSON 2:Protobuf 3:MessagePack

如果一个服务处理请求出现错误,它可以返回一个错误。它设置响应的MessageStatusType为1(ERROR),并设置响应元数据中的错误消息。错误的keyrpcx-errorvalue是错误消息。

results matching ""

    No results matching ""