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

Posted

技术标签:

【中文标题】如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接【英文标题】:how to manage multiple socket connections for a chat app with 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);

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

【问题讨论】:

【参考方案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。谢谢! 很高兴能帮上忙!

以上是关于如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接的主要内容,如果未能解决你的问题,请参考以下文章

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

通过 Socket.io 更新 React 状态

如何在 React Native 应用程序的 iOS 后台运行 socket.io?

React.js JWT Socket.io 身份验证

如何通过 Express JS 服务器使 React JS 和 Socket IO 连接在一起?

react-native socket.io 来自节点服务器的无尽请求