看到文檔里有說(shuō)使用text協(xié)議可以解決TCP粘包問題。我用了之后測(cè)試出現(xiàn)的是比如我第一次發(fā)送的數(shù)據(jù)是不帶\n結(jié)尾的數(shù)據(jù),第二次發(fā)送的數(shù)據(jù)是帶\n結(jié)尾的。那服務(wù)端這邊會(huì)把第一次發(fā)送的數(shù)據(jù)一起傳輸過(guò)來(lái)。
我不知道這樣是否是正常的且正確的。但是我想要的結(jié)果是不帶\n的數(shù)據(jù)就不要了。
第一次發(fā)送的數(shù)據(jù)為:哈哈
第二次發(fā)送的數(shù)據(jù)為:嘿嘿\n
服務(wù)端顯示:哈哈嘿嘿
我使用的是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);
// 發(fā)送響應(yīng)給客戶端
Gateway::sendToClient($client_id, "okkkkk");
}
框架怎么可能把數(shù)據(jù)隨意丟棄,那不是出bug了...
text協(xié)議只認(rèn)\n為結(jié)束符,遇到一個(gè)結(jié)束符就認(rèn)為是一個(gè)完整請(qǐng)求,和發(fā)幾次數(shù)據(jù)沒有關(guān)系