swoole tcp保證接受資料接受的完整性
阿新 • • 發佈:2019-01-10
開啟包長檢測特性。包長檢測提供了固定包頭+包體這種格式協議的解析。啟用後,可以保證Worker
程序onReceive
每次都會收到一個完整的資料包。程式碼如下:
server端:
$server = new swoole_server('0.0.0.0',9501); $server->set([ 'open_length_check' => true, 'package_max_length' => 81920, 'package_length_type' => 'N', 'package_length_offect' => 0, 'package_body_offect' => 4, ]); $server->on('receive',function(swoole_server $server,$fd,$reactor_id,$data){ //var_dump($server->getClientInfo($fd)); echo 'receive data:'.($data).PHP_EOL; }); $server->start(); function tcp_unserialize($data){ $recvData = unserialize(substr($data,4)); return $recvData; }
client端:
$client = new swoole_client(SWOOLE_SOCK_TCP); $client->connect('127.0.0.1',9501); $client->send(tcp_serialize("world hi")); $client->send(tcp_serialize('hello hi')); function tcp_serialize($data) { $sendStr = serialize($data); var_dump($sendStr); $sendData = pack('N',strlen($sendStr)).$sendStr; var_dump($sendData); return $sendData; }
server輸出結果:(因為添加了swoole_debug擴充套件所以有額外資訊)log_level可調整
client端結果: