Dubbo单一长连接多路复用原理解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nimasike/article/details/81940674

dubbo协议:

2byte magic:类似java字节码文件里的魔数,用来判断是不是dubbo协议的数据包。魔数是常量0xdabb
1byte 的消息标志位:16-20序列id,21 event,22 two way,23请求或响应标识
1byte 状态,当消息类型为响应时,设置响应状态。24-31位。状态位, 设置请求响应状态,dubbo定义了一些响应的类型。具体类型见com.alibaba.dubbo.remoting.exchange.Response
8byte 消息ID,long类型,32-95位。每一个请求的唯一识别id(由于采用异步通讯的方式,用来把请求request和返回的response对应上)
4byte 消息长度,96-127位。消息体 body 长度, int 类型,即记录Body Content有多少个字节。

dubbo的提供者(P)与消费者(C)采用单一长连接传输数据,使用Netty的NIO模型。

P-C之间的数据传输是单连接多路复用的,思想类似于HTTP2的多路复用。

如果消费者(C)并发调用提供者(P), 在使用单一连接的情况下是如何区分请求与响应的呢?

我们使用抓包工具还具体分析其中原理,假设我们同时发送2个请求。

请求1的数据包:

其中5-12个字节为 请求唯一ID。

请求2的数据包:

其中5-12个字节为 请求唯一ID。

请求1的响应数据包:

可以看到唯一ID与请求1是对应的。

请求2的响应数据包:

总结:

原理与http2的多路复用差不多,都是使用了一个唯一ID来表示请求与响应,通过这个ID来区分并发时的请求与响应数据包。

猜你喜欢

转载自blog.csdn.net/nimasike/article/details/81940674