webim-plugin基于workerman開發的,啟動和停止完全遵循workerman規則。
傳送門:[workerman啟動停止文檔](http://doc.workerman.net/install/start-and-stop.html)
## **windows下啟動**
雙擊項目根目錄下的start_for_win.bat
## **linux下啟動與停止**
>[warning]注意:啟動停止等命令都是在命令行中完成的。
以下命令需要在項目根目錄下運行
### 啟動
以debug(調試)方式啟動
php start.php start
以daemon(守護進程)方式啟動
php start.php start -d
### 停止
php start.php stop
### 重啟
php start.php restart
### 平滑重啟
php start.php reload
### 查看狀態
php start.php status
### 查看連接狀態
php start.php connections
debug和daemon方式區別
1、以debug方式啟動,代碼中echo、var_dump、print等打印函數會直接輸出在終端。
2、以daemon方式啟動,代碼中echo、var_dump、print等打印會默認重定向到/dev/null文件。
3、以debug方式啟動,終端關閉后系統會隨之關閉并退出。
4、以daemon方式啟動,終端關閉后系統繼續后臺正常運行。
### 什么是平滑重啟?
平滑重啟不同于普通的重啟,平滑重啟可以做到在不影響用戶的情況下重啟服務,以便重新載入PHP程序,完成業務代碼更新。
平滑重啟一般應用于業務更新或者版本發布過程中,能夠避免因為代碼發布重啟服務導致的暫時性服務不可用的影響。
注意:只有子進程運行過程中載入的文件支持reload,主進程載入的文件不支持reload。或者說Worker::runAll執行完后workerman運行過程中動態加載的文件支持reload,Worker::runAll執行前就載入的文件代碼不支持reload
### 平滑重啟原理
系統分為主進程和子進程,主進程負責監控子進程,子進程負責接收客戶端的連接和連接上發來的請求數據,做相應的處理并返回數據給客戶端。當業務代碼更新時,其實我們只要更新子進程,便可以達到更新代碼的目的。
當系統主進程收到平滑重啟信號時,主進程會向其中一個子進程發送安全退出(讓對應進程處理完畢當前請求后才退出)信號,當這個進程退出后,主進程會重新創建一個新的子進程(這個子進程載入了新的PHP代碼),然后主進程再次向另外一個舊的進程發送停止命令,這樣一個進程一個進程的重啟,直到所有舊的進程全部被置換為止。
我們看到平滑重啟實際上是讓舊的業務進程逐個退出然后并逐個創建新的進程做到的。為了在平滑重啟時不影響客用戶,這就要求進程中不要保存用戶相關的狀態信息,即業務進程最好是無狀態的,避免由于進程退出導致信息丟失。