問題引出:
把一個workermanLibTimer放在start_gateway.php中執行,每兩秒執行一次,每次執行首先記錄一段文字到文本文件。
當以 php start.php start 的方式運行的時候是沒有問題的,但當以php start.php start -d 的方式運行的時候好像計時器并沒有運行起來。
start_gateway.php代碼如下
問題解決:
業務邏輯都要在onXXX回調中運行的(手冊中有強調過),換句話說定時器不能在Worker::runAll();執行前運行。
因為Worker::runAll();執行前運行的代碼都是屬于主進程的,主進程不能有業務代碼,主進程的業務代碼會被子進程繼承,導致與預期結果不符。
上述例子中可以放到onWorkerStart中運行定時器,建議放到start_businessworker.php中的$businessworker->onWorkerStart回調中。
相關文章教程推薦:workerman教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦