Rachet中的实时一对一消息
问题描述:
我只是在学习Ratchet(库中用于PHP中的实时聊天应用程序)。按照该文件,下面的功能将得到两件事情:Rachet中的实时一对一消息
- 从谁的消息来了,
- 消息。
但是,它错过了谁发送。该功能将消息发送给所有连接的人。但是我想实现一对一的聊天。有没有办法做到这一点?
以下是该图书馆的链接: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);
}
}
}
答
我建议你为用户想要的每个聊天做不同的订阅。每个人之间的聊天消息
一个通道:subscriptionname = room123
和每个人交谈,你可以使用不同的签名:subscriptionname = personal456。
然后让您的客户端应用程序监听2个不同的订阅,并尝试根据收到该邮件的订阅的名称进行路由。
答
是的,你可以做一对一的信息。但是,这些仍然需要通过套接字服务器 - 您不能在浏览器之间进行直接的点对点消息传递。每个用户都有一个永久开放的连接,但仅限于服务器。
您需要做的是按照每个客户端连接存储用户名,以便遍历$this->clients
时,可以检索连接或用户名。然后,您可以将此列表广播给所有订阅者,这取决于您设计所需的任何隐私约束。
最后,每个用户则可以发送私人消息,通过指定:
- 消息文本
- 谁,谁才能解决
这将棘轮接收的用户名,并从那里您可以使用用户名在$this->clients
中进行连接查找。如果连接仍处于打开状态,则连接将用于转发消息。
您可以选择发送一个“确认”(确认)给原始发件人,说他们的消息是(或没有)发送。
它是不是已经有空间来限制一对一的消息? dunno以前从未使用过它。 – Chay22
你可以试试https://github.com/php-pure/sacky-server – daison12006013