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协议长连接的主要内容,如果未能解决你的问题,请参考以下文章