需求: 实时检查房间人数,在房间人数到达要求后,由服务器主动向房间推送消息。
问题: 如何实现GatewayWorker主动向房间推送呢?不是由onMessage回调去触发的。
我的想法: 想用GatewayWorker单开一个进程去检查所有房间的人数,在房间达到一定人数后由这个进程主动向这个房间去推送数据,这个具体该怎么实现呢?
use Workerman\Worker; use Workerman\Lib\Timer; use GatewayWorker\Lib\Gateway; // 单独启动一个worker进程运行全局定时器 $task = new Worker(); $task->count = 1; $task->onWorkerStart = function(){ // 设置成start_register.php里面的端口,这里假设是1238 Gateway::$registerAddress = '127.0.0.1:1238'; $room_id = xxx; // 每秒检查一次$room_id房间人数 Timer::add(1, function(){ $online_count = Gateway:: getClientCountByGroup($room_id); // 人数大于某个值,则发送消息给这个房间 if($online_count > XX) { Gateway::sendToGroup($room_id, xxxxx); } }); }; if(!defined('GLOBAL_START')) { Worker::runAll(); }
多谢大大指点,我去试试。
不客气
多谢大大指点,我去试试。
不客气