1:ZAB协议
//待补齐
2:DUBBO协议
Dubbo协议先抄官方一张图吧,由图可以知道,Dubbo协议是一个字节型的协议,使用字节的特定位置表示特定的含义。
1:0-16 bit位,第一个字节和第二个字节表示魔法值,用于标识是dubbo协议,它的值是 0xdabb
2:16 bit位,一个bit位,用于标识是请求还是响应,1表示请求,0表示响应
3:17 bit位,一个bit位,只在是请求时才有用,用于标识是否需要从服务器返回值。
4:18 bit位,一个bit位,用于标识是不是一个事件,比如,心跳事件。如果是,设置成 1.
5:19-24 bit位,5个bit位,标识序列化类型,比如,如果是fastjson,值是6,总共支持2^5中序列化类型。
6:24-31 bit位,一个字节,表示服务器的响应状态码。仅在是请求时才有用。
- 20 - OK
- 30 - CLIENT_TIMEOUT
- 31 - SERVER_TIMEOUT
- 40 - BAD_REQUEST
- 50 - BAD_RESPONSE
- 60 - SERVICE_NOT_FOUND
- 70 - SERVICE_ERROR
- 80 - SERVER_ERROR
- 90 - CLIENT_ERROR
- 100 - SERVER_THREADPOOL_EXHAUSTED_ERROR
以上一个int,前四个字节的内容。
7:第4个自己和第12个字节内容表示请求id,标识唯一的请求。64位长整数。
8:第13个字节和第16个字节:序列化后的内容长度(可变部分),按字节计数。int类型。
9:Variable Part
-
被特定的序列化类型(由序列化 ID 标识)序列化后,每个部分都是一个 byte [] 或者 byte
- 如果是请求包 ( Req/Res = 1),则每个部分依次为:
- Dubbo version
- Service name
- Service version
- Method name
- Method parameter types
- Method arguments
- Attachments
- 如果是响应包(Req/Res = 0),则每个部分依次为:
- 返回值类型(byte),标识从服务器端返回的值类型:
- 返回空值:RESPONSE_NULL_VALUE 2
- 正常响应值: RESPONSE_VALUE 1
- 异常:RESPONSE_WITH_EXCEPTION 0
- 返回值:从服务端返回的响应bytes
- 返回值类型(byte),标识从服务器端返回的值类型:
- 如果是请求包 ( Req/Res = 1),则每个部分依次为:
**注意:**对于(Variable Part)变长部分,当前版本的dubbo框架使用json序列化时,在每部分内容间额外增加了换行符作为分隔
http://dubbo.apache.org/zh-cn/blog/dubbo-protocol.html
3:RocketMQ内部实现相关
//待补齐