如何使用socket.io管理聊天应用程序的多个套接字连接,如何响应本机,nodejs

时间:2018-08-18 06:18:37

标签: node.js sockets react-native socket.io chat

我想知道如何使用socket.io动态创建聊天室。我已经看到了这个问题:What is the proper way to manage multiple chat rooms with socket.io?,但这并不是我想要的。我想打开一个具有预定ID的聊天室,以便可以跟踪数据库,客户端等内部的不同对话。我想出了如何处理向相应客户端发送新消息的方法,但是我无法弄清楚如何动态建立连接,或者我是否必须一次为多个聊天室中的许多用户管理多个套接字。

这里有node.js代码:

websocket.on('connection', (socket) => {
  console.log(socket);
  clients[socket.id] = socket;
  socket.on('5b17803f134204f7f3e274e0-5b17703f134204f7f3e274e0', (message) => onMessageReceived(message, socket));
  socket.on('5b17803f134204f7f3e274e0-5b17703f134204f7f3e274e0-join', (chatInfo) => _sendExistingMessages(chatInfo, socket));
});

如您所见,我希望将“ 5b ...”字符串替换为动态字符串。进行此连接的客户端代码仅一行:

this.socket = SocketIOClient(port);

有没有办法做到这一点?后续问题还将是如何管理所有这些不同的套接字?一套插座?任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

使用socket.io,您通常只需要在想要它们进入的房间中进行socket.join(),这可以是您的动态房间名称。从那里,您可以向房间发出事件。

io.on('connection', function (socket) {
    socket.join('5b17803f134204f7f3e274e0-5b17703f134204f7f3e274e0', function (err) {
        if(err) {
            throw err
        }
        io.to('5b17803f134204f7f3e274e0-5b17703f134204f7f3e274e0').emit('joined', {})
    })
})

如果上面的示例不起作用,您可能需要在套接字上设置另一个事件处理程序,然后让您的客户端将该事件发送到会议室中,然后您可以从那里触发将返回数据发送到客户

socket.on('joinRoom', function (data, callback) {
    socket.join(data, function (err) {
        if(err) {
            return callback("error")
        }
        return callback("joined")
    })
})