GatewayWorker如何单开一个进程

IDGOD001

需求
实时检查房间人数,在房间人数到达要求后,由服务器主动向房间推送消息。

问题
如何实现GatewayWorker主动向房间推送呢?不是由onMessage回调去触发的。

我的想法
想用GatewayWorker单开一个进程去检查所有房间的人数,在房间达到一定人数后由这个进程主动向这个房间去推送数据,这个具体该怎么实现呢?

3039 1 0
1个回答

walkor
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();
}
年代过于久远,无法发表回答
🔝