Ratchet PHP - 推送消息服务

Posted

技术标签:

【中文标题】Ratchet PHP - 推送消息服务【英文标题】:Ratchet PHP - Push messaging service 【发布时间】:2014-05-26 12:47:09 【问题描述】:

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

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

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

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

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

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

查看我的slides about WebSockets in PHP。注释是捷克语的,但您可以找到有用的源代码示例。

【讨论】:

干杯,$conn->send('Hello') 工作虽然我发誓我以前尝试过!那些幻灯片很方便,虽然只会英文:) 啊,现在明白你的意思了,文档确实解释了它,但它们很差。 为了避免问另一个问题,知道使用 ZMQContext 的 getSocket 中的第二个参数是什么吗? IE。 getSocket(ZMQ::SOCKET_PUSH, 'Pull Notification'); - “拉取通知”在哪里使用? 大声笑别担心,***.com/questions/23875497/… 上的任何线索都很棒:D 我也有向特定用户发送消息的问题,我发布了问题***.com/questions/49418640/…。问题是我无法从另一个脚本中获取连接用户列表

以上是关于Ratchet PHP - 推送消息服务的主要内容,如果未能解决你的问题,请参考以下文章

在 Ratchet 中定期向客户端发送消息

Ratchet PHP Websockets:私人消息传递(控制消息发送给谁)

如何在php后端及时推送消息给客户端

Ratchet WebSocket Server 可以向客户端本身发送消息吗?

PHP+SSE服务器向客户端推送消息

PHP+SSE服务器向客户端推送消息