【问题标题】:how to manage multiple socket connections for a chat app with socket.io, react native, nodejs如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接
【发布时间】:2019-01-25 02:45:55
【问题描述】:

我想知道如何使用 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);

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

【问题讨论】:

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


    【解决方案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")
        })
    })
    

    【讨论】:

    • 知道了。使用这个答案,我在每个套接字连接上都使用它,它侦听“joinRoom”消息。然后,在该消息上,它使用与“joinRoom”消息一起传递的数据来设置我之前在帖子中描述的两个 socket.on。谢谢!
    • 很高兴能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2020-07-24
    相关资源
    最近更新 更多