Rachet中的实时一对一消息

时间:2016-04-07 12:02:06

标签: php ratchet

我正在学习Ratchet(用于PHP中的实时聊天应用程序的库)。根据文档,以下函数将收到两件事:

  1. 消息来自谁
  2. 消息。
  3. 然而,它错过了发送者。此功能将消息发送给所有已连接的人员。但我也希望实现一对一的聊天。有办法吗?

    以下是该图书馆的链接:http://socketo.me/docs/hello-world

    public function onMessage(ConnectionInterface $from, $msg) {
        //send the message to all the other clients except the one who sent.
        foreach ($this->clients as $client) {
            if ($from !== $client) {
                $client->send($msg);
            }
        }
    }
    

3 个答案:

答案 0 :(得分:1)

我建议您根据用户的需要进行不同的订阅。

每个人之间聊天消息的一个频道:subscriptionname = room123

对于每次个人聊天,您可以使用不同的签名:subscriptionname = personal456。

然后让您的客户端应用程序收听2个不同的订阅并尝试根据收到该消息的订阅名称进行路由。

答案 1 :(得分:0)

是的,您可以执行一对一的消息。但是,这些仍然必须通过套接字服务器 - 您不能在浏览器之间进行直接的对等消息传递。每个用户都有一个永久打开的连接,但只能与服务器连接。

您需要做的是针对每个客户端连接存储用户名,以便在遍历$this->clients时,您可以检索连接或用户名。然后,您可以将此列表广播给所有订阅者,具体取决于您的设计所需的任何隐私限制。

最后,每个用户可以通过指定:

发送私人消息
  • 消息文本
  • 发送给它的用户名

这将由Ratchet接收,然后您可以使用用户名在$this->clients中进行连接查找。您最终使用的连接(如果它仍处于打开状态)是用于转发邮件的连接。

您可以选择发送" ack" (确认)发件人说他们的信息是(或没有)传递的。

答案 2 :(得分:0)

过滤掉客户端的问题是,根据文档,连接对象被重用,这意味着您实际上可以有多个客户端共享同一连接对象。