問題引出:
把一個\Workerman\Lib\Timer放在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教學
#以上是workerman中定時器不生效的詳細內容。更多資訊請關注PHP中文網其他相關文章!