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

标签 node.js angular socket.io chat

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

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

最佳答案

一对一和群聊很相似。如果我们在 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;

}

关于node.js - 更好的一对一和群聊方法 nodejs Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891413/

相关文章:

node.js - Sails 0.9.4,socket.io,新手

javascript - 无法使用 JavaScript 关闭 WebSocket

node.js - 查询Mongoose中的多个子文档元素

node.js 模块或 require.js

javascript - 如何使用 async 和 wait 来获取订阅 API 调用的返回值

Angular:管道不起作用

angular - 显示来自 angularfire2 查询的单个项目

javascript - Node Socket.IO socket.on() 跨多个文件

node.js - 在Docker容器中访问Angular应用程序

node.js - nodejs ejs 包含意外的标识符