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