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

我正在实施一对一和群聊在我的应用程序在NodeJs使用socket.ioangular4在客户端。 我是新来的socket.io和angular度4.我想问什么是更好的方法,例如,如果用户想发送消息到特定用户或它想要发送消息给用户组。

根据我的Rnd,我应该保持所有连接用户的obj,并且obj用他的用户名(email或者什么)包含该用户的套接字ID,以便如果某个用户想要发送消息给某个用户,我们应该需要他的用户名称,我们可以通过他的用户名访问他的ID。 还是有什么解决办法,除此? 我应该在哪里保持用户和套接字ID 全局variables或数据库的 obj?

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

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

所以当一个人发送消息的时候,他们会把消息发送到他们所属的房间,并且想要聊天,而不是发送给个人用户。 那么,那个房间里的每个人,无论是其他人还是多人,都会收到。

– Node.js

join客户到一个房间

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; }