<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[info] TCP粘包問題的處理 1. 特殊字符 * 根據客戶端與服務端相互約定的特殊的符號,對接收的數據進行分割處理 2. 固定包頭+包體協議(主流) * 通過與在數據傳輸之后會在tcp的數據包中攜帶上數據的長度,然后呢服務端就可以根據這個長度,對于數據進行截取 >[info] 特殊字符 ![](https://img.kancloud.cn/a9/de/a9de40b778631a8fcc3e90f8e05d455c_751x231.png) 1. **使用原生PHP處理** * **服務端代碼** ~~~ <?php echo swoole_get_local_ip()['ens33'] . ':9503' . PHP_EOL; // 實例化swoole 服務端 $server = new Swoole\Server("0.0.0.0", 9503); // 連接 $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); // 消息 $server->on('receive', function ($server, $fd, $reactor_id, $data) { // 把字符串打散為數組 var_dump(explode("\r\n" , $data)); echo '接收到數據:' . $fd . "\n"; $server->send($fd, "Swoole:ok"); // $server->close($fd); }); // 關閉 $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); // 打開 $server->start(); ~~~ * **客戶端代碼** ~~~ <?php // 實例化客戶端 $client = new Swoole\Client(SWOOLE_SOCK_TCP); // 建立連接 if (!$client->connect('127.0.0.1', 9503, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } // 結尾 $end = "\r\n"; // 循環發送信息 for ($i = 0;$i < 20;$i++) { // 發送 $client->send("hello_world_" . $end); } // 獲取服務端數據 echo $client->recv(); // 不斷開連接 // while (true){} // 關閉 //$client->close(); ~~~ * **執行效果** 1. 開啟服務端監聽 * 得到的數據是已經處理好了的 ![](https://img.kancloud.cn/69/e7/69e7e7ed770d333e6b661a978a7d9f88_434x203.png) 2. 客戶端運行 ![](https://img.kancloud.cn/0b/4e/0b4e9fc259a370b4c826aa553533e97f_645x83.png) 2. **使用swoole 內置函數處理粘包問題** 函數:**open_eof_check** 手冊地址:https://wiki.swoole.com/#/server/setting?id=open_eof_check ![](https://img.kancloud.cn/bb/35/bb351fbcdf23a5db86b3b82d835d7188_1050x522.png) * **服務端代碼** ~~~ <?php echo swoole_get_local_ip()['ens33'] . ':9503' . PHP_EOL; // 實例化swoole 服務端 $server = new Swoole\Server("0.0.0.0", 9503); $server->set([ 'open_eof_check' => true, //打開EOF檢測 'package_eof' => "\r\n", //設置EOF ]); // 連接 $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); // 消息 $server->on('receive', function ($server, $fd, $reactor_id, $data) { echo '接收到數據:' . $data . "\n"; $server->send($fd, "Swoole:ok"); // $server->close($fd); }); // 關閉 $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); // 打開 $server->start(); ~~~ * **客戶端代碼** ~~~ <?php // 實例化客戶端 $client = new Swoole\Client(SWOOLE_SOCK_TCP); // 建立連接 if (!$client->connect('127.0.0.1', 9503, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } // 結尾 $end = "\r\n"; // 循環發送信息 for ($i = 0;$i < 20;$i++) { // 發送 $client->send("hello_world_" . $end); } // 獲取服務端數據 echo $client->recv(); // 不斷開連接 // while (true){} // 關閉 //$client->close(); ~~~ * **執行效果** 1. 開啟服務端監聽 ![](https://img.kancloud.cn/1b/16/1b16a441a978812a99774d94a36742f0_426x161.png) 2. 客戶端執行 ![](https://img.kancloud.cn/f4/5b/f45b8f1421efa257865f7e3a3bdd5c69_595x163.png) ***** >[info] 固定包頭+包體協議 客戶端和服務端都需要設置,并且type類型和offset偏移都需要保持一致。 ![](https://img.kancloud.cn/28/4a/284a2b665c46242dc31b7c9866d1b9b8_807x413.png) * 函數:**open_length_check** 手冊地址:https://wiki.swoole.com/#/server/setting?id=open_length_check ![](https://img.kancloud.cn/37/1b/371b4746a7d022e491748d1f2d3f6e89_1212x272.png) * **客戶端代碼** ~~~ <?php // 實例化客戶端 $client = new Swoole\Client(SWOOLE_SOCK_TCP); // 建立連接 if (!$client->connect('127.0.0.1', 9503, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } // pack() # 將數據打包成一個二進制字符串 // unpack() # 解析二進制字符 // 循環發送信息 for ($i = 0;$i < 10;$i++) { $conText = '123'; // 利用pack 打包長度 $len = pack('n' , strlen($conText)); var_dump($len); // 組包 $sendData = $len . $conText; var_dump($sendData); // 發送 $client->send($sendData); } // 獲取服務端數據 echo $client->recv(); // 不斷開連接 // while (true){} // 關閉 //$client->close(); ~~~ * **服務端代碼** ~~~ <?php echo swoole_get_local_ip()['ens33'] . ':9503' . PHP_EOL; // 實例化swoole 服務端 $server = new Swoole\Server("0.0.0.0", 9503); // 配置 $server->set([ 'open_length_check' => true, 'package_max_length' => 1 * 1024 * 1024, 'package_length_type' => 'n', 'package_length_offset' => 0, 'package_body_offset' => 2, ]); // 連接 $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); // 消息 $server->on('receive', function ($server, $fd, $reactor_id, $data) { /* var_dump($data); // 解包 $fooLen = unpack('n' , substr($data , 0 , 2))[1]; var_dump($fooLen); // 得到真正的數據 $conText = substr($data , 2 , $fooLen); var_dump($conText);*/ echo "接收到數據:" . $data . PHP_EOL; $server->send($fd, "Swoole:ok"); // $server->close($fd); }); // 關閉 $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); // 打開 $server->start(); ~~~ * **運行效果** 1. 開啟服務端監聽 ![](https://img.kancloud.cn/9c/20/9c20fcdf37c32a0cf1018f87d2db27a2_553x200.png) 2. 客戶端運行 ![](https://img.kancloud.cn/3d/5f/3d5fa291ae7885f41847cc44191e0a8b_586x149.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看