更好的方法一对一和组聊天nodejs Socket.io

时间:2017-10-23 14:08:13

标签: node.js angular socket.io chat

我正使用 socket.io angular 4 NodeJs 的应用程序中实施一对一和群聊 在客户端。我是socket.io和angular 4的新手。我想问一下,如果用户想要向特定用户发送消息或者想要向用户组发送消息,那么更好的方法是什么。

根据我的Rnd,我应该保留所有连接用户的obj,并且obj包含该用户的套接字ID及其用户名(电子邮件或者什么),以便如果某个用户想要向某个用户发送消息,我们应该需要他的用户名,我们可以通过他的用户名访问他的id。 或者除此之外有什么解决方案吗? 我应该在哪里保留用户和套接字ID 全局变量或数据库 的对象?

1 个答案:

答案 0 :(得分:4)

一对一和群聊非常相似。如果我们在socket.io中使用房间https://socket.io/docs/rooms-and-namespaces/#

一对一只有2个用户在同一个房间。在群聊中,超过2人可以在同一个房间。

因此,当一个人发送消息时,他们会将其发送到他们所属的房间,并希望与之聊天,而不是将其发送给个人用户。然后,那个房间里的每个人,无论是另一个人还是多个人都会收到它。

- Node.js

加入客户

io.on('connection', function(client){
     client.join(conversation._id)
});

向房间发送消息

   client.broadcast.to(conversation_id).emit('message:send:response', {
       msg: res.msg,
       conversation_id: res.data._id
  });

- Angular

收听发出的消息

getMessages(conversation_id) {

    let observable = new Observable(observer => {

        this.socket.on('message:send:response', (chat) => {

            if (chat.conversation_id === conversation_id) {
                observer.next(chat.msg);
            }
        })

    });

    return observable;

}