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

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来区分并发时的请求与响应数据包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值