企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### **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),然后循环发送