swoole支持熱啟動
所謂熱重啟,就是當服務器相關代碼有所變動之后,無需停止服務,而是在服務器仍然運行的狀態下更新文件。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文件,這樣就能實現代碼文件的熱更新。 來看下代碼實現:
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文件,輸入如下內容:
echo "Reloading..." cmd=$(pidof reload_master) kill -USR1 "$cmd" echo "Reloaded"
這樣,就可以通過執行這個腳本重啟服務器了。 點此查看完整源碼
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!