我正使用 socket.io 和 angular 4 在 NodeJs 的应用程序中实施一对一和群聊 强大>在客户端。我是socket.io和angular 4的新手。我想问一下,如果用户想要向特定用户发送消息或者想要向用户组发送消息,那么更好的方法是什么。
根据我的Rnd,我应该保留所有连接用户的obj,并且obj包含该用户的套接字ID及其用户名(电子邮件或者什么),以便如果某个用户想要向某个用户发送消息,我们应该需要他的用户名,我们可以通过他的用户名访问他的id。 或者除此之外有什么解决方案吗? 我应该在哪里保留用户和套接字ID 全局变量或数据库 的对象?
答案 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;
}