2

我使用 Ratchet 看到的大多数示例都是用于聊天服务的,我目前正在构建一个应用程序,用户可以在其中登录并根据他们的用户 ID 从服务器接收通知。

我有基本的教程,但是我很难理解几点:

调用该onOpen()方法时,我将$conn对象设置为一个数组,如下所示:

$this->clients[$conn->resourceId]['conn'] = $conn;

在我的 Javascript 中,在onopen函数中,我还使用该函数发送 JSON 有效负载send。我的服务器将其拍照并像这样存储在onMessage方法中:

$this->clients[$conn->resourceId]['json'] = $json;

所以现在我将连接的用户存储在一个数组中,如何向特定用户发送消息?我已经调查onSubscribebroadcast但无济于事,但真的不明白WampServerInterface应该用于什么?

由于我自己的类是一个正在运行的脚本,我显然无法在其他任何地方创建它的新实例。由于我的应用程序将发送用户特定的更新,我需要某种方式来执行以下操作:

使用另一个脚本获取当前连接的用户,在某处处理这些并返回他们可能拥有的任何更新,每 60 秒一次。现在虽然这听起来像是轮询,但它只是一个连接,因此不会在服务器上密集 - 至少我是这么认为的。那么,如何将正在运行的服务器脚本与其他地方的其他“静态”PHP 脚本进行交互呢?

谢谢

4

1 回答 1

3

$conn参数是ConnectionInterface的实现- 它有一个send()方法。这就是您可以向客户端发送消息的方式。

Ratchet(通过 React.PHP)也支持 timers。因此,如果没有外部依赖,您可以使用$loop->addPeriodicTimer()每 60 秒向每个客户端发送消息。

如果您需要基于某些外部依赖项(如 Web 服务器请求或 cron 脚本)发送消息,请使用 ZMQ(Ratchet 文档)。这很简单。

查看我关于 PHP 中的 WebSockets 的幻灯片。注释是捷克语的,但您可以找到有用的源代码示例。

于 2014-05-26T12:56:31.907 回答