dubbo 协议探秘及看Netty处理数据包,揭网络传输原理
目录
1:先说结论
相关文档
2: 项目实践
在dubbo中用netty做网络通信,突然想到避免不了数据的解决粘包问题,此次记录研究下ali怎么做的,具体查看源码本文主要记录结论
1:先说结论
1:通过dubbo协议的设计,我们可以知道dubbo分为消息头和消息体,消息头里面有整个消息体的大小。dubbo采取消息头存放消息body大小进行标识,
2:完整地消息头16个字节,所以如果此次信息包大于等于16字节,说明请求头是完整的。
3:如果消息 请求头+消息体长度 是否 大于此次消息包的长度,如果大于的话,说明此次的消息不是完整的一个消息,也意味着进行拆包了,直接返回,等待其它信息
4:正常解析消息头的后,在Exchanger的解析,如果看到消息体不满足即:当消息不完整的时候,返回了一个
DecodeResult.NEED_MORE_INPUT;详细处理逻辑:
首先把接收的message,写入到全局变量buffer里面,然后使用message指向buffer。通过message.readable()这个判断message是否完全处理完,从而进行循环处理。如果完全处理完了整个buffer,就清空,否则buffer等于剩下未处理的部分消息。
详情:
那么这个dubbo协议长什么样呢,在我们眼中的http、tcp协议的包体应该都历历在目。大约是header + body,当然这个dubbo也不失众人所望,仍是如此结构
详情linkhttps://blog.csdn.net/u013076044/article/details/84575235
由于本篇文章是对服务器和客户端相互传输过程中的粘包拆包问题,所以这里只对Dubbo协议的decode过程进行解析。
在dubbo中,Exchanger扮演着把消息体解析为request和response的角色。主要包在Exchanger两个文件中
相关文档
https://blog.csdn.net/u013076044/article/details/84575235 dubbo 协议探秘
https://wuhulala.blog.csdn.net/article/details/89279699 Dubbo 处理TCP粘包拆包
2: 项目实践
1:
还没有评论,来说两句吧...