怎么实现单一的查询,然后发送给所有人

0

我的需求是每隔一段时间查询数据库,然后推送给所有人
代码类似如下:


while(true){

$sql ="select 1+1";
$count=$mysql->query($sql);
Gateway::sendToAll(json_encode($count));
sleep(1000);
}

我现在用websocket的onMessage来写这个的话,但是他是每个客户端连接上来都要开一份这个代码在运行。
如何才能实现只运行一个代码,所有客户都能接受到啊。。

已邀请:

chenyeyu

赞同来自:

我试着在start_gateway写定时器,可惜使用sendToAll就报错。。


\Workerman\Lib\Timer::add(2, function() {
\GatewayWorker\Lib\Gateway::sendToAll('1111');
});

walkor

赞同来自:

gateway只管网络io,业务逻辑请在businessworker中写。


可以在businessworker->onWorkerStart里面写,如果只想在其中一个进程运行,就判断下$businessworker->id,比如只在$businessworker->id===0的进程中运行


打开start_businessworker.php
合适的位置加上


$businessworker->onWorkerStart = function($businessworker) {
// 只在0号businessworker设置定时器
if ($businessworker->id === 0) {
\Workerman\Lib\Timer::add(2, function() {
\GatewayWorker\Lib\Gateway::sendToAll('1111');
});
}
}

要回复问题请先登录注册