<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 功能強大 支持多語言、二開方便! 廣告
                # 熱重啟 --- [TOC=2,3] ## 1.服務器熱重啟 所謂熱重啟,就是當服務器相關代碼有所變動之后,無需停止服務,而是在服務器仍然運行的狀態下更新文件。Swoole通過內置的reload函數以及兩個自定義信號量實現了這一功能。 Swoole可用的三個信號:SIGTERM,SIGUSR1,SIGUSR2。 * SIGTERM用于停止服務器 * SIGUSR1用于重啟全部的Worker進程 * SIGUSR2用于重啟全部的Task Worker進程。 那要如何實現熱更新代碼文件呢? Swoole的回調函數中有這個一個回調onWorkerStart,該回調會在Worker進程啟動時被調用。因此,當swoole_server收到SIGUSR1信號并重啟全部Worker進程后,onWorkerStart就會被調用。如果在onWorkerStart中require全部的代碼文件,每次onWorkerStart后都會重新require一次php文件,這樣就能實現代碼文件的熱更新。 * Reload操作只能重新載入Worker進程啟動后加載的PHP文件,建議使用get_included_files函數來列出哪些文件是在WorkerStart之前就加載的PHP文件,在此列表中的PHP文件,即使進行了reload操作也無法重新載入。比如要關閉服務器重新啟動才能生效。 * 對于Server的配置即$serv->set()中傳入的參數設置,必須關閉/重啟整個Server才可以重新加載 來看下代碼實現: ```php public function onStart( $serv ) { cli_set_process_title("reload_master"); } public function onWorkerStart( $serv , $worker_id) { require_once "reload_page.php"; Test(); // reload_page.php中定義的一個函數 } ``` 首先,在onStart回調函數中通過php的cli_set_process_title函數設置進程名。 在onWorkerStart中,require相關的php文件。 然后,新建一個reload.sh文件,輸入如下內容: ```shell echo "Reloading..." cmd=$(pidof reload_master) kill -USR1 "$cmd" echo "Reloaded" ``` 這樣,就可以通過執行這個腳本重啟服務器了。[點此查看完整源碼](https://github.com/LinkedDestiny/swoole-doc/tree/master/src/04/reload) * SIGUSR1: 向主進程/管理進程發送SIGUSR1信號,將平穩地restart所有worker進程 * 在PHP代碼中可以調用$serv->reload()完成此操作 * swoole的reload有保護機制,當一次reload正在進行時,收到新的重啟信號會丟棄 * 如果設置了user/group,Worker進程可能沒有權限向master進程發送信息,這種情況下必須使用root賬戶,在shell中執行kill指令進行重啟 * reload指令對addProcess添加的用戶進程無效 ## 2.停止服務 * SIGTERM: 向主進程/管理進程發送此信號服務器將安全終止 * 在PHP代碼中可以調用$serv->shutdown()完成此操作 ## 3.停止task worker 1.7.7版本增加了僅重啟task_worker的功能。只需向服務器發送SIGUSR2即可。
                  <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>

                              哎呀哎呀视频在线观看