Php 使用websockets实现类似这样的聊天和收件箱消息

Php 使用websockets实现类似这样的聊天和收件箱消息,php,websocket,redis,phpwebsocket,Php,Websocket,Redis,Phpwebsocket,在做了一些研究后,我发现SO使用websockets进行聊天和邮件收件箱通知,并混合了redis。我想实现类似的系统,我刚刚开始使用websockets,并坚持选择最佳方法 为此,我已得出以下策略。一旦用户登录,我将为他打开一个连接 public function onOpen(ConnectionInterface $conn) { //add user to the database or data structure } 我正在考虑在后端使用每个用户唯一

在做了一些研究后,我发现SO使用websockets进行聊天和邮件收件箱通知,并混合了redis。我想实现类似的系统,我刚刚开始使用websockets,并坚持选择最佳方法

为此,我已得出以下策略。一旦用户登录,我将为他打开一个连接

public function onOpen(ConnectionInterface $conn) 
    {
        //add user to the database or data structure
    }
我正在考虑在后端使用每个用户唯一的idregistration id来表示每个用户,以便能够唯一地标识用户

Q.1我如何使用ConnectionInterface对象存储这个额外的ID信息,以便在发送消息时,我具有特定用户的连接参考,并且可以将消息路由到所选用户,例如ID=20

例如,当ID为43、54和78的用户正在聊天,并且43被发送到54和78时,我可以向聊天室中的所有人发送消息,但发送者本身除外。这种方式也可以处理私人聊天,因为那时只有两个用户

Q.2其次,我应该在后端维护一个本地数据结构,比如heap来存储聊天室ID和相应用户的信息,还是使用redis。哪一个更可靠,性能更好?我对redis一无所知,刚刚了解到SO在使用,所以在投资redis之前需要先弄清楚

问题3.我如何在客户端识别聊天信息和收件箱通知,就像从服务器发送信息一样

我认为这个解决方案就是发送标识符标签,比如0-聊天、1-收件箱提醒、2-信誉变化等。这种方法正确吗

Q.4用户可以同时打开两个或多个聊天室。最后我将如何区分

我认为这是因为每个聊天室都有其唯一的标识符字符串,每次都会随消息一起发送,并且使用此字符串,我可以在后端识别适当的聊天室,消息应该发布到该聊天室。这种方法正确吗

如果问题2的答案是redis,我可以将redis与Mysql并行使用吗


你找到解决办法了吗?我有类似的问题
foreach ($this->clients as $client) {
            if($client->id == $receiver_id)
                $client->send($msg);
        }