我使用 Ratchet 查看的大多数示例都是针对聊天服务的,我目前正在构建一个应用程序,用户可以在其中登录并根据其用户 ID 从服务器接收通知。
我有基本的教程,但是我很难理解以下几点:
当。。。的时候onOpen()
方法被调用,我设置了$conn
对象放入数组中,如下所示:
$this->clients[$conn->resourceId]['conn'] = $conn;
在我的 Javascript 中,在onopen
函数我还发送一个 JSON 有效负载send
功能。我的服务器将其拍照并像这样存储在onMessage
method:
$this->clients[$conn->resourceId]['json'] = $json;
所以现在我将连接的用户存储在一个数组中,如何向特定用户发送消息?我调查过onSubscribe
和broadcast
没有用,但不太明白什么WampServerInterface
应该用来做什么?
由于我自己的类是一个正在运行的脚本,因此我显然无法在其他任何地方创建它的新实例。由于我的应用程序将发送用户特定的更新,我需要某种方法来执行以下操作:
使用另一个脚本获取当前连接的用户,在某处处理这些用户并返回他们可能拥有的任何更新,每 60 秒一次。现在,虽然这听起来像轮询,但只有一个连接执行此操作,因此不会对服务器造成很大的负担 - 至少我是这么认为的。那么我如何才能将正在运行的服务器脚本与其他地方的其他“静态”PHP 脚本进行交互呢?
Thanks
The $conn
参数是一个实现连接接口 https://github.com/cboden/Ratchet/blob/master/src/Ratchet/ConnectionInterface.php- 它有一个send()
方法。这就是您向客户端发送消息的方式。
Ratchet(通过 React.PHP)也支持定时器 https://github.com/reactphp/event-loop/blob/master/src/LoopInterface.php。因此,如果没有外部依赖,您可以使用$loop->addPeriodicTimer()
每 60 秒向每个客户端发送消息。
如果您需要根据某些外部依赖项(例如 Web 服务器请求或 cron 脚本)发送消息,请使用 ZMQ(棘轮文档 http://socketo.me/docs/push)。这很容易。
看看我的有关 PHP 中 WebSocket 的幻灯片 https://speakerdeck.com/ondrejmirtes/websockety-jak-na-real-time-aplikace-v-php。这些注释是捷克语的,但您可以找到有用的源代码示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)