Dubbo协议长连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo协议长连接相关的知识,希望对你有一定的参考价值。

参考技术A 连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
优点:采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(官方推荐使用)
缺点:在大文件传输时,单一连接会成为瓶颈

NIO单一长连接案例

业务线程在发出请求之前,需要存储一个请求对象,同时挂起相应的业务线程(挂起不会被任务调度,所以不存在线程切换消耗),这个请求对象包含了此次请求的id,然后在获取服务端返回的数据的时候,解析出这个id,通过这个id取出请求对象,并唤醒对应的线程。

Dubbo协议

参考技术A         TCP协议栈中, 每层模型都有自己的协议报文格式 ,TCP协议是网络七层模型中的 传输层 ,在TCP上层是应用层, 应用层协议常见的有telnet 等, Dubbo协议作为建立在TCP协议之上的一种协议 ,自然也有自己的协议包格式。

       Dubbo协议也是由 header和body 两部分组成,Dubbo 协议采用 经典定长包头 + 变长包体 的协议设计,包头记录了 数据的序列化方式 , 请求状态 , 数据长度 等信息,包体是 请求/响应对象序列化后的二进制数据 。格式见下图

header格式如下:

字段说明:

1)其中前两个列为魔数,类似Class类文件里面的作用,这里用来标识一个帧的开始,固定为0xdabb.其中第一个字节固定为0xda,第二个字节固定为0xbb.

2)第3个列是请求和序列化标记的组合结果requstflag|serializationId。

3)第4个列是响应报文里面才设置(请求报文里面不设置),用来标示响应的结果码

4)第5个列是请求id

5)第6个列是body内容大小,单位是byte.

请求报文设置:

响应报文设置:

以上是关于Dubbo协议长连接的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo支持的9种通讯协议你知道吗?

分布式的几件小事dubbo的通信协议与序列化

Dubbo协议

Dubbo 协议

Dubbo原理简介

dubbo基础学习总结