1. 程式人生 > >swoole tcp保證接受資料接受的完整性

swoole tcp保證接受資料接受的完整性

開啟包長檢測特性。包長檢測提供了固定包頭+包體這種格式協議的解析。啟用後,可以保證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端結果: