失效链接处理 |
Netty精粹之TCP粘包拆包问题 PDF 下载
相关截图:
主要内容:
什么是粘包、拆包?
对于什么是粘包、拆包问题,我想先举两个简单的应用场景:
1. 客户端和服务器建立一个连接,客户端发送一条消息,客户端关闭与服务端的连接。
2. 客户端和服务器简历一个连接,客户端连续发送两条消息,客户端关闭与服务端的连
接。
对于第一种情况,服务端的处理流程可以是这样的:当客户端与服务端的连接建立成功之
后,服务端不断读取客户端发送过来的数据,当客户端与服务端连接断开之后,服务端知道
已经读完了一条消息,然后进行解码和后续处理...。对于第二种情况,如果按照上面相同的
处理逻辑来处理,那就有问题了,我们来看看第二种情况下客户端发送的两条消息递交到服
务端有可能出现的情况:
第一种情况:
服务端一共读到两个数据包,第一个包包含客户端发出的第一条消息的完整信息,第二个包
包含客户端发出的第二条消息,那这种情况比较好处理,服务器只需要简单的从网络缓冲区
去读就好了,第一次读到第一条消息的完整信息,消费完再从网络缓冲区将第二条完整消息
读出来消费。
第二种情况:
服务端一共就读到一个数据包,这个数据包包含客户端发出的两条消息的完整信息,这个时
候基于之前逻辑实现的服务端就蒙了,因为服务端不知道第一条消息从哪儿结束和第二条消
息从哪儿开始,这种情况其实是发生了TCP粘包。
|