Rachet中的实时一对一消息

问题描述:

我只是在学习Ratchet(库中用于PHP中的实时聊天应用程序)。按照该文件,下面的功能将得到两件事情:Rachet中的实时一对一消息

  1. 从谁的消息来了,
  2. 消息。

但是,它错过了谁发送。该功能将消息发送给所有连接的人。但是我想实现一对一的聊天。有没有办法做到这一点?

以下是该图书馆的链接: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); 
     } 
    } 
} 
+0

它是不是已经有空间来限制一对一的消息? dunno以前从未使用过它。 – Chay22

+0

你可以试试https://github.com/php-pure/sacky-server – daison12006013

我建议你为用户想要的每个聊天做不同的订阅。每个人之间的聊天消息

一个通道:subscriptionname = room123

和每个人交谈,你可以使用不同的签名:subscriptionname = personal456。

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

是的,你可以做一对一的信息。但是,这些仍然需要通过套接字服务器 - 您不能在浏览器之间进行直接的点对点消息传递。每个用户都有一个永久开放的连接,但仅限于服务器。

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

最后,每个用户则可以发送私人消息,通过指定:

  • 消息文本
  • 谁,谁才能解决

这将棘轮接收的用户名,并从那里您可以使用用户名在$this->clients中进行连接查找。如果连接仍处于打开状态,则连接将用于转发消息。

您可以选择发送一个“确认”(确认)给原始发件人,说他们的消息是(或没有)发送。