[英]Is there a way to share socket connection between browser tabs
有些人已经在其他地方问过这个问题,我只是不确定这里是否存在。 无论如何,我将Primus.io
与engine.io
用作变压器。 我想知道是否有可能在浏览器(客户端)上共享websocket连接。 就像我连接一个客户端,然后在另一个选项卡上连接另一个客户端一样。 理想情况下,它们应该获得与我通过套接字发送的内容相同的连接,两个选项卡都应该能够获得消息。
其他人提到过使用localStorage
作为在不同选项卡之间共享/通信相同数据的方法,但是我只是觉得它并不整洁。
非常感谢您的帮助。
最好,
每个选项卡将具有到服务器的单独连接,并具有唯一的套接字ID。
如果要向每个套接字发出有关用户ID或会话ID的消息,则需要一些东西来将用户或会话映射到其多个套接字连接。
在Socket.IO中,它们具有“房间”的概念。
connection
您可以将插座添加到房间中 。 本示例将使用passport.js认证的用户名进行分组。
io.on('connection', function(socket){
socket.join(socket.request.user.username);
});
然后,您可以向该房间的所有插座发送消息。
io.to(username).emit('some event'):
Socket.IO在disconnect
为您清理房间。
https://github.com/cayasso/engine.io-rooms是engine.io房间的实现,可能有用。
简单来说
如果两个选项卡中的代码配合使用,则可以在一个选项卡中与另一个选项卡共享来自webSocket连接的数据。 当一个选项卡打开时,它必须找出是否有任何其他选项卡已通过现有的webSocket连接打开,然后必须要求该选项卡与新选项卡共享其数据。 这不是一个微不足道的操作,因为浏览器窗口无法轻松找到其他浏览器窗口,除非新窗口是由先前窗口的脚本打开的,而不是由用户打开的。
但是,如果每个Windows都尝试与服务器建立webSocket连接,则每个Windows都将获得自己的webSocket连接。 选项卡之间不会自动共享webSocket连接。
仅供参考,此处的通常行为是,每个窗口仅获得与服务器的自己的webSocket连接,然后服务器仅与每个浏览器窗口进行通信。 如果一个窗口中的某些信息需要与另一个窗口保持同步,则可以对服务器进行编码,以使两种信息都保持最新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.