美文网首页
28.Dubbo协议与网络传输

28.Dubbo协议与网络传输

作者: 山海树 | 来源:发表于2020-09-18 08:15 被阅读0次

什么是粘包与半包问题

在客户端发送数据时,实际是把数据写入到了TCP发送缓存里面的。

如果发送的包的大小比TCP发送缓存的容量大,那么这个数据包就会被分成多个包,通过socket多次发送到服务端,服务端第一次从接受缓存里面获取的数据,实际是整个包的一部分,这时候就产生了半包现象,半包不是说只收到了全包的一半,是说收到了全包的一部分。

如果发送的包的大小比TCP发送缓存容量小,并且TCP缓存可以存放多个包,那么客户端和服务端的一次通信就可能传递了多个包,这时候服务端从接受缓存就可能一下读取了多个包,这时候就出现了粘包现象。

服务端从接受缓存读取数据后一般都是进行解码操作,也就是会把byte流转换了pojo对象,如果出现了粘包或者半包现象,则进行转换时候就会出现异常。

出现粘包和半包的原因是TCP层不知道上层业务的包的概念,它只是简单的传递流,所以需要上层应用层协议来识别读取的数据是不是一个完整的包。

如何避免

比较常见方案是应用层设计协议时候协议包分为header和body,header里面记录body长度,当服务端从接受缓冲区读取数据后,如果发现数据大小小于包的长度则说明出现了半包,这时候就回退读取缓存的指针,等待下次读事件到来的时候再次测试。如果发现包长度大于了包长度则看长度是包大小整数倍则说明了出现了粘包,则循环读取多个包,否者就是出现了多个整包+半包。

多个包之间添加分隔符。

包定长,每个包大小固定长度。

作者:阿里加多
链接:https://www.jianshu.com/p/df928692c9ea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 28.Dubbo协议与网络传输

    什么是粘包与半包问题 在客户端发送数据时,实际是把数据写入到了TCP发送缓存里面的。 如果发送的包的大小比TCP发...

  • JavaScript_ cookie及正则

    一、 cookie (一)http与https http,https 都是网络传输协议 是用于网络相关传输,htt...

  • 网络

    网络传输 TCP流与报文 TCP协议与非阻塞接口

  • tcp和http协议

    TCP/IP协议与Http协议的区别 TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用...

  • ☆技术问答集锦(四)

    2 TCP 与 UDP 网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议;传输层:TCP协...

  • Android网络接口 Socket 套接字通信

    http,socket,tcp/ip 网络传输与通讯 TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠...

  • 接口测试(三)

    常见协议 http 超文本传输协议https 安全超文本传输协议ftp 文件传输协议tcp 网络控制协议ip 互联...

  • Android基础(15)—网络传输协议

    网络传输协议 App与服务器交互就会涉及到信息的交换,而信息的交互就必然需要一套完整的数据协议。网络传输协议或简称...

  • HTTP知识总结

    1.网络模型 应用层、传输层、网络层、数据链路层、物理层 网络层:HTTP协议、FTP协议、DNS 协议 传输层...

  • 网络传输协议

    指服务器和客户端间进行通信时的约束和规范。 常见协议: HTTP/HTTPS(超文本传输协议) FTP(文件传输协...

网友评论

      本文标题:28.Dubbo协议与网络传输

      本文链接:https://www.haomeiwen.com/subject/gtvpektx.html