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

Asa*_*sad 3 chat node.js socket.io angular

我正在在NodeJs的应用程序中使用socket.io和客户端的angular 4 进行一对一的聊天。我是socket.io和angular 4的新手,我想问问对此有什么更好的方法,例如,用户是要向特定用户发送消息还是要向一组用户发送消息。

根据我的报告,我应该保留所有已连接用户的obj,并且该obj包含该用户的套接字ID及其用户名(email或whatever),以便如果某个用户想要向某人发送消息,则我们需要该用户名称,我们可以通过他的用户名访问他的ID。还是有什么解决办法呢?我应该在哪里保留用户和套接字ID 全局变量或数据库的 obj ?

Kay*_*Kay 6

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

在一对一中,只有2个用户位于同一房间。在多人聊天的情况下,同一房间可以容纳2个以上的人。

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

-Node.js

将客户加入房间

io.on('connection', function(client){
     client.join(conversation._id)
});
Run Code Online (Sandbox Code Playgroud)

向房间发送消息

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

-角度

听发出的消息

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;

}
Run Code Online (Sandbox Code Playgroud)