代码之家  ›  专栏  ›  技术社区  ›  Shekar

如何使用socket.io、react native、nodejs管理聊天应用程序的多个套接字连接

  •  2
  • Shekar  · 技术社区  · 6 年前

    我想知道如何使用socket.io动态创建聊天室。我见过这个问题: What is the proper way to manage multiple chat rooms with socket.io? ,但这不完全是我要找的。我想用我预先确定的id打开聊天室,以便跟踪数据库、客户端等中的不同对话。我已经找到了如何处理向相应客户端发送新消息的方法,但我无法确定如何动态建立连接,或者是否必须同时管理多个套接字许多聊天室的用户。

    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 回复  |  直到 6 年前
        1
  •  1
  •   Matt W    6 年前

    对于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")
        })
    })