如何向客户端主动发送消息?代码不写在回调函数里怎么获取$connection?

hiangcun

在查看服务端主动推送给客户端消息的例子时发现,大多数代码都是写在回调函数(最普遍的是onMessage函数)里的。 本人现在要实现的场景是服务端不定期主动向客户端推送消息,代码上我想在类文件里写一个方法外部调用,这样的话就会有个问题, 找不到$connection , 继而$connection->send() 无法使用。

这个问题该如何处理呢? 谢谢

2191 2 0
2个回答

maq

每个 Worker 是一个监听容器,所有正在通信的连接都保存在 $worker->connections 里面。

但是你想要主动给客户端推送信息的时候,首先自己得知道推送给哪个客户端(除非你是要广播,那样的话直接遍历 $worker->connections 就可以了),所以你得自己想办法来维护一个类似 client_id 的东西,用于找到特定的客户端。

如果你使用 GatewayWorker 或者 PHPSocketIO 的话,这样的机制已经存在了。

  • 暂无评论
maq

再有,【在类文件里写一个方法外部调用】这个说法是有问题的。

Workerman 是一个 CLI 方式运行的进程,所以跟传统意义上 Web 应用里的 PHP 程序文件不一样。【类文件】不是一个等待被调用的东西,它自己就是一个进程,没有【外部调用】。想要主动向客户端推送消息,有两个可能的途径:一个是用定时器触发,一个是类似 web-msg-sender 那样以网络通信的方式接收来自外部的指令并进行相应的操作。

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