Gateway定时器问题

yxon

我遇到的场景是这样:
在onMessage中用户发送绑定信息过来后我会生成一个定时器来主动推送数据 这块逻辑执行时间比较久,导致在这个定时器执行过程中 其他用户发送绑定信息服务端阻塞不会绑定成功
这种情况下应该怎么处理?

1116 2 0
2个回答

2548a

耗时操作就不要放到gateway进程里去,单独开一个进程, 调用getAllUidList 接口获取绑定的uid,然后调用 sendToUid 来发送就行,没必要去阻塞gateway进程

  • yxon 2022-07-24

    大佬 那我是需要在onmessage绑定成功后再new Worker() 然后创建个定时器是吗

2548a

开自定义进程看这里 https://www.workerman.net/q/8853
不需要,加定时器无非是为了隔一段时间推送一次数据,定时器直接在自定义进程里的onWorkerStart 里写
类似这样
public function onWorkerStart($worker)
{
//假设隔10秒推送一次数据
Timer::add(10,function (){
//获取绑定的所有uid
$uid_arr = Gateway::getAllUidList(void);
//然后在这里循环uid_arr,给他们推送对应的数据就行了
})

}

  • 暂无评论
年代过于久远,无法发表回答
×
🔝