<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 1.9.17 支持異步安全重啟特性 `1.9.17`版本重構了底層`WorkerStop`的機制,實現了異步安全重啟的特性。包括`stop`、`reload`、`max_request` 3個特性全部復用了一套代碼。都支持了異步安全重啟。 之前的版本 Worker進程收到`SIGTERM`、達到`max_request`時,會立即停止服務,這時`Worker`進程內可能仍然有事件監聽,這些異步任務將會被丟棄。新版本中會先創建新的`Worker`,舊的`Worker`在完成所有事件之后自行退出。為了防止某些`Worker`一直不退出,底層還增加了一個`30`秒的定時器,在約定的時間內舊`Worker`沒有退出,底層會強行終止。 > 可設置`server->max_wait_time`修改`Worker`進程最大等待時間,默認為`30`秒 實現原理 ---- * `Worker`進程收到`SIGTERM`、達到`max_request`時,移除管道監聽,立即回調`onWorkerStop`,并通知`Manager`進程。這時當前的`Worker`不會再收到任何客戶端請求數據 * `Worker`進程會設置一個`30`秒的超時定時器,實現退出超時 * `Manager`進程收到`Worker`進程的消息后,創建新的`Worker` * 新的`Worker`繼續處理客戶端請求數據 * 舊的`Worker`會持續觸發`onWorkerExit`事件,`PHP`代碼可以此事件回調函數中實現清理邏輯 * 舊的`Worker`會持續檢測`EventLoop`中的`socket`數量,在沒有任何事件監聽后退出進程 * 舊的`Worker`在`30`秒內仍然沒有完成異步`IO`任務,底層強制終止運行,退出進程 進程退出事件 ---- 為了支持異步重啟特性,底層新增了一個`onWorkerExit`事件,當舊的`Worker`即將退出時,會持續觸發`onWorkerExit`事件,在此事件回調函數中,應用層可以嘗試清理某些長連接`Socket` ```php $serv->on('WorkerExit', function (swoole_server $serv, $worker_id) { $redisState = $serv->redis->getState(); if ($redisState == Swoole\Redis::STATE_READY or $redisState == Swoole\Redis::STATE_SUBSCRIBE) { $serv->redis->close(); } }); ``` 設置等待時間 --- ```php $serv->set([ 'max_wait_time' => 60, ]); ``` 開啟方式 --- onWorkerExit 回調功能需要設置 `reload_async = true` 才能開啟 ```php $serv->set(['reload_async' => true]); ```
                  <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>

                              哎呀哎呀视频在线观看