出于教学目的, 通信协议设计两套实现

  1. HTTP协议
  2. 自定义协议

1. HTTP协议

1.1 RequestHeader

header中不需要任何值

1.2 请求体

请求体使用json格式来传输数据

  1. {
  2. serviceName:"服务名,和注册中心的相匹配",
  3. methodName:"能够定位服务提供方的方法",
  4. request:[ #数组是请求参数
  5. "",
  6. ""
  7. ]
  8. }

这个请求体, 够用了

2. 自定义协议

自定义协议需要使用Netty等框架来进行通信, 所以需要规定好每条报文的详细格式

参考一下Dubbo的协议
image.png

2.1 格式

我们就设计简单点

定义: [16bit:魔数][1bit: 标识请求还是响应][1bit: 是否双向传输][1bit: 是否心跳包][5bit:预留][16bit:请求id][32bit:请求体长度(单位字节)][请求体长度: 请求体] 魔数: 1111000000001111 请求标识位: 0=请求; 1=响应 是否双向传输: 0=否; 1=是 是否心跳包: 0=否; 1=是

例:
发送一条请求体内容是数字1的请求,请求体大小为1字节

则:
魔数: 1111000000001111
请求标识位: 0
是否双向传输: 1
是否心跳包: 0
预留位: 00000
请求id: 0000000000000001
请求长度: 00000000000000000000000000000001
请求体: 00000001

最终组装的请求为:
11110000000011110100000000000000000000010000000000000000000000000000000100000001

2.2 请求体

请求体这里就不搞花样了, 就用json格式, 和上门的HTTP协议的使用规则一样

  1. {
  2. serviceName:"服务名,和注册中心的相匹配",
  3. methodName:"能够定位服务提供方的方法",
  4. request:[ #数组是请求参数
  5. "",
  6. ""
  7. ]
  8. }