使用socket.io,nodejs和mongodb处理聊天系统

时间:2018-07-23 09:37:36

标签: node.js mongodb socket.io

我必须为我们的客户在线商店创建一个聊天系统,我们使用nodejs / mongodb / socket.io。

我刚刚测试了nodejs和一个简单的html页面之间的实时对话是否有效:

const server = app.listen(app.get('port'), () => {
    console.log("working");

});

var io = require('socket.io').listen(server);
io.on('connection', function(socket){

    socket.on('chat message', function(msg){
    console.log('message: ' + msg);

});

    socket.emit('I just emit here for test', 'hello');
});

此代码有效,现在最有趣的部分是能够使商店经理与客户讨论,但是客户不应该在他们之间进行讨论(我已经有一个“客户”和“商店经理”集合) 喜欢 下图:

chat system with socket.io

那么,有人可以告诉我实现此目标的最佳工作流程是什么吗?这意味着如何识别客户?开始和他对话?我对socket.io有点迷路了...

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在socket.io中,每个套接字都有一个单独的ID,可用于在特定套接字之间进行通信。您可以根据需要为ID分配特定的值,例如用户的MongoDB _id,例如:

this.userEmit(userID).emit('got user settings', settings);
// where userEmit is a custom function that will handle an error case when the id can't be found

您还可以广播到特定的“房间”,这样只有该房间成员的套接字才能接收到消息,例如:

        io.sockets.in(groupID).emit('update group status', {
            groupID: groupID,
            onlineMembers: x.length
        });

有关某些示例,请参见其文档:https://socket.io/docs/rooms-and-namespaces/

答案 1 :(得分:1)

  1. 创建一个消息架构,该架构将存储客户和经理之间的对话。
  2. 创建一个包含房间或通讯ID的架构。

每当客户登录到您的系统时,向他显示房间列表,当客户选择任何房间时,向他显示对话。

现在,如何创建房间? 每当客户想要与经理进行交流时(让我们使用ClientA和ManagerA),请检查对话是否已经存在。如果已经存在通信,请创建一个像"clientA-room-managerA"这样的唯一会议室,并将双方都添加到该会议室,并将所有对话存储在现有消息架构中。

如果通信不存在,请创建一个像"clientA-room-managerA"这样的房间,然后在将包含通信ID的架构中创建一个聊天记录,然后像在"clientA-room-managerA"之前一样开始该房间

通过这种方式,您应该能够为客户和经理创建多个聊天记录。

一个客户端将无法与其他客户端通信

经理可以与各种客户进行交流

考虑一个用户ID为123456789的经理和一个0987654321的客户端,那么您可以创建一个房间,例如:

var room = manager.user_id + "-room-" + client.user_id;
// room = 123456789-room-0987654321
//then join the client and manager to the room
manager_socket.join(room);
client_socket.join(room);

//you can send a message in a room:
io.sockets.in(room).emit('new_message',{"msg":"hi there"});

PS: 这是一种群组聊天,其中的群组包含2个成员,即客户和管理员。作为参考,您可以看到以下链接:

http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/ https://github.com/jgonera/socket.io-multichat

相关问题