我的需求是每隔一段時間查詢數(shù)據(jù)庫,然后推送給所有人
代碼類似如下:
while(true){
$sql ="select 1+1";
$count=$mysql->query($sql);
Gateway::sendToAll(json_encode($count));
sleep(1000);
}
我現(xiàn)在用websocket的onMessage來寫這個的話,但是他是每個客戶端連接上來都要開一份這個代碼在運行。
如何才能實現(xiàn)只運行一個代碼,所有客戶都能接受到啊。。
我試著在start_gateway寫定時器,可惜使用sendToAll就報錯。。
\Workerman\Lib\Timer::add(2, function() {
\GatewayWorker\Lib\Gateway::sendToAll('1111');
});
gateway只管網(wǎng)絡(luò)io,業(yè)務(wù)邏輯請在businessworker中寫。
可以在businessworker->onWorkerStart里面寫,如果只想在其中一個進程運行,就判斷下$businessworker->id,比如只在$businessworker->id===0的進程中運行
打開start_businessworker.php
合適的位置加上
$businessworker->onWorkerStart = function($businessworker) {
// 只在0號businessworker設(shè)置定時器
if ($businessworker->id === 0) {
\Workerman\Lib\Timer::add(2, function() {
\GatewayWorker\Lib\Gateway::sendToAll('1111');
});
}
}