如何使用 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 管理聊天应用程序的多个套接字连接
如何在 React Native 应用程序的 iOS 后台运行 socket.io?