使用websockets实现像SO这样的聊天和收件箱消息

时间:2015-02-15 07:55:09

标签: php websocket redis phpwebsocket

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

我已经达成了以下策略。一旦用户登录,我将为他打开一个连接。

public function onOpen(ConnectionInterface $conn) 
    {
        //add user to the database or data structure
    }

我正在考虑在后端为每个用户提供他唯一的ID(注册ID),以便我可以唯一地识别用户。

  

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

foreach ($this->clients as $client) {
            if($client->id == $receiver_id)
                $client->send($msg);
        }

例如,当具有ID 43,44和78的用户正在聊天,并且43被发送到54& 78,除了发件人本身,我可以向聊天室的所有人发送消息。这样也可以处理私人聊天,因为那时只有两个用户。

  

Q.2其次,我应该在后端维护像堆这样的本地数据结构来存储聊天室ID和相应用户的信息,还是使用redis。哪一个更可靠,性能更好(我对redis一无所知,只知道SO使用,所以需要在将时间投入redis之前清除)

     

问题3如何在客户端识别聊天消息和收件箱通知,因为从服务器我可以直接发送消息。

我已经将此解决方案视为发送标识符标记,例如0 - 聊天,1-inbox警报2 - 声誉更改等。这种方法是否正确?

  

Q.4用户可能同时打开两个或多个聊天室。我如何区分beckend?

我想到了这一点,因为每个聊天室都会有唯一的标识符字符串,每次都会与消息一起发送并使用此字符串,我可以在后端识别正确的聊天室,消息应该发布到该聊天室这种方法是否正确?

  

Q.5如果对Q.2的回答是redis,我可以并行使用Redis和Mysql吗?

0 个答案:

没有答案