棘轮PHP - 推送消息服务

时间:2014-05-26 12:47:10

标签: javascript php phpwebsocket ratchet

我正在使用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 个答案:

答案 0 :(得分:3)

$conn参数是ConnectionInterface的实现 - 它有send()方法。这就是你如何向客户发送消息。

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

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

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