<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[danger] 健康檢查 對于長連接這種斷開的問題;主要的點就在于服務端會保存客戶端會話的有效性以及平臺上監控所有客戶端的網絡狀況;對于這種功能的實現我們可以通過兩種方式實現: 1. 輪詢機制 2. 心跳機制 >[danger] 為什么需要健康檢查? > <span style="color:red;">如:</span> TCP客戶端關閉了,服務端不知道,服務端任然不會結束連接,所以會保持大量的資源占用,得不到釋放。 >[danger] 1. 輪詢機制 不推薦:服務端會 **定時** 向客戶端發送一個信息 <span style="color:red;">(你還在不在?不在我下線了!)</span> **產生的問題:** 如客戶端數量太多,幾萬甚至幾十萬,會造成阻塞,消耗資源。 ![](https://img.kancloud.cn/f1/4a/f14a8bed9cca787ea162c459429159cd_974x686.png) >[danger] 2. 心跳機制 推薦:客戶端 向 服務端發送數據(數據保證最小化),服務端會設置一個范圍段,如你在20秒之內沒有回答。 <span style="color:red;">(女朋友向你發送一個消息,20秒之內沒有回答,今晚就要跪榴蓮了!)</span> 20秒之內客戶端沒有向服務端發送數據心跳,服務端則直接踢了這個客戶端,讓其斷開連接。 ![](https://img.kancloud.cn/9f/63/9f632ec739899aaa5df4f9d697c03856_1239x664.png) * **心跳包** 從客戶端到服務器這條巨大的鏈路中會經過無數的路由器,每個路由器都可能會檢測多少秒時間內沒有數據包,則會自動關閉連接的節能機制。為了讓這個可能會出現的節能機制失效,客戶端可以設置一個定時器,每隔固定時間發送一個隨機字符一 字節的數據包,這種數據包就是心跳包。 * **代碼部分:** * 前置函數說明: 1. 啟用心跳檢測:**heartbeat_check_interval** 手冊地址:https://wiki.swoole.com/#/server/setting?id=heartbeat_check_interval ![](https://img.kancloud.cn/a9/55/a95552f33f066ea53e8283b5ec87e4b4_1043x307.png) 2. 最大空閑:**heartbeat_idle_time** 手冊地址:https://wiki.swoole.com/#/server/setting?id=heartbeat_idle_time ![](https://img.kancloud.cn/56/56/5656b4f05b78612d657ac1140db46c53_1023x446.png) * **服務端代碼** ~~~ <?php echo swoole_get_local_ip()['ens33'] . ':9503' . PHP_EOL; // 實例化swoole 服務端 $server = new Swoole\Server("0.0.0.0", 9503); // 設置參數值 $server->set([ // 表示每n秒遍歷一次 'heartbeat_check_interval' => 2, // 表示一個連接如n秒內未向服務器發送任何數據,則強制關閉該連接 'heartbeat_idle_time' => 4 ]); // 連接 $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); // 消息 $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Swoole: {$data}"); // $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"); } // 每隔2000ms觸發一次 swoole_timer_tick(2000, function ($timer_id) use ($client) { // 發送 $client->send("hello world\n"); // 獲取服務端數據 echo $client->recv(); }); // 不斷開連接 // while (true){} // 關閉 //$client->close(); ~~~ * **執行效果** 1. 開啟服務端監聽(并未斷開連接) ![](https://img.kancloud.cn/21/ad/21ad9f6c8bc08b31552f3d545f9f6720_510x288.png) 2. 客戶端定時發送任務 ![](https://img.kancloud.cn/56/a2/56a2281cef24c58d6af0846ba86d5231_461x163.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>

                              哎呀哎呀视频在线观看