### **TCP通信特点**
1. TCP 是流式协议没有消息边界,客户端向服务器端发送一次数据,可能会被服务器端分成多次收到。客户端向服务器端发送多少数据。服务器端可能一次全部收到。
2. 保证传输的可靠性,顺序。
3. TCP拥有拥塞控制,所以数据包可能会延后发送。
没有消息边界:
可以理解为水在一个水管里的流动,我们不知道哪段数据是一个我们需要的完整数据
收发有缓冲区:
比如:当水从一端流到了另一端,我们在收数据的时候,不可能每来一滴水就处理一次,这个缓冲区就相当于有了一个水桶,再接了一定的水之后内核再给数据交到用户空间,这样可以大大提升性能。
## **什么是 TCP 粘包?**
TCP 粘包是指发送方发送的若干包数据 到 接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
## **TCP 出现粘包的原因?**
TCP 粘包是指发送方发送的若干包数据 到 接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
## **Swoole怎么处理粘包**
### **EOF 结束协议**
通过约定结束符,来确定包数据是否发送完毕
开启open_eof_check=true,并用package_eof来设置一个完整数据结尾字符,同时设置自动拆分open_eof_split
举个例子:
![](https://i.vgy.me/hvc511.png)
#### **注意:**
1、要保证业务数据里不能出现package_eof设置的字符,否则将导致数据错误了。
2、可以手动拆包,去掉open_eof_split,自行 explode("\r\n", $data),然后循环发送