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

标签 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);

有办法做到这一点吗?后续问题还包括如何管理所有这些不同的套接字?也许是一组 socket ?任何帮助将不胜感激,谢谢!

最佳答案

使用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")
    })
})

关于node.js - 如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51905872/

相关文章:

javascript - 如何在文件中找到一系列字节并将它们替换为另一个缓冲区?

javascript - 带有 object.keys 和 foreach 的未定义属性名称

Python:通过引用传递套接字

java - 如何用Java构建一个简单的点对点系统?

node.js - NestJS 初创公司的开发速度慢得令人难以置信

javascript - 异步回调nodejs

node.js - NodeJS 服务器的可扩展性问题

react-native - 如何在 native react 中实现 Twitter 个人资料屏幕的用户体验,带有可滚动选项卡的可折叠标题(粘性选项卡栏)?

android - 如何知道 React-Native 中的 AsyncStorage 何时已满?

javascript - 尝试呈现 "loading"提示,但数据一旦准备好