Tcp粘包
概念
tcp在发送数据的时候因为存在数据缓存的关系,对于数据在发送的时候在 短时间内 如果连续发送很多小的数据的时候就会有可能一次性一起发送,还有就是对于大的数据就会分开连续发送多次
解决方案
方案1 : 设置特殊符号
客户端和服务端约定特殊符号标识,每次发送的数据结尾设置标识,服务端接受数据根据标识拆分
以下两种方式处理:
代码
客户端发送 tcp_client:
$end = "\r\n"; //特殊符号
for ($i=0; $i < 100; $i++) {
$client->send("hello world!".$end);
}
服务端接收处理tcp server:
处理方式一 (特殊符号):
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
echo "接收到数据:".var_dump(explode("\r\n", $data))."\n";
$server->send($fd, "respon success");
});
# 处理方式二 (特殊字符 swoole):
$server->set([
'open_eof_check' => true, //打开EOF检测