看到文档里有说使用text协议可以解决TCP粘包问题。我用了之后测试出现的是比如我第一次发送的数据是不带\n结尾的数据,第二次发送的数据是带\n结尾的。那服务端这边会把第一次发送的数据一起传输过来。
我不知道这样是否是正常的且正确的。但是我想要的结果是不带\n的数据就不要了。
第一次发送的数据为:哈哈
第二次发送的数据为:嘿嘿\n
服务端显示:哈哈嘿嘿
我使用的是webman,安装的GatewayWorker代码如下:
'gatewaytcp' => [
'handler' => Gateway::class,
'listen' => 'text://0.0.0.0:7373',
'count' => cpu_count(),
'reloadable' => false,
'constructor' => ['config' => [
'lanIp' => '127.0.0.1',
'startPort' => 3300,
'pingInterval' => 25,
'pingData' => '{"type":"ping"}',
'registerAddress' => '127.0.0.1:1236',
'onConnect' => function(){},
]]
],
public static function onMessage($client_id, $message)
{
Log::notice($message);
// 发送响应给客户端
Gateway::sendToClient($client_id, "okkkkk");
}
框架怎么可能把数据随意丢弃,那不是出bug了...
text协议只认\n为结束符,遇到一个结束符就认为是一个完整请求,和发几次数据没有关系