Javascript 跨浏览器选项卡共享websocket?
我们希望每个浏览器有一个套接字,而不是浏览器中每个选项卡有一个套接字。我们如何才能做到这一点?我读到了关于共享网络工作者的文章,这很有希望。我们也非常感谢您的推荐。不幸的是,据我所知,mozilla或internet explorer尚未实现共享web workers。那么在这种情况下该怎么办呢?我们正在服务器端使用node.js。远不理想,但您可以使用flash本地连接来设置一个websocket连接,然后跨选项卡和多个浏览器共享它Javascript 跨浏览器选项卡共享websocket?,javascript,html,node.js,websocket,web-worker,Javascript,Html,Node.js,Websocket,Web Worker,我们希望每个浏览器有一个套接字,而不是浏览器中每个选项卡有一个套接字。我们如何才能做到这一点?我读到了关于共享网络工作者的文章,这很有希望。我们也非常感谢您的推荐。不幸的是,据我所知,mozilla或internet explorer尚未实现共享web workers。那么在这种情况下该怎么办呢?我们正在服务器端使用node.js。远不理想,但您可以使用flash本地连接来设置一个websocket连接,然后跨选项卡和多个浏览器共享它 有关更多信息,请参阅。现在实现socket.io的方式似乎没
有关更多信息,请参阅。现在实现socket.io的方式似乎没有解决方案。查看视频第五部分中的吉列尔莫·劳赫。他也认为这是一个挑战。在某些情况下,我使用localStorage对象在选项卡之间进行通信。localStorage对象有一个事件系统,用于告诉同一来源的另一个选项卡或窗口某些数据已更改()。其思想是,让带有套接字的选项卡将时间戳和接收到的数据写入本地存储。如果时间戳太旧-可能是因为带有套接字的选项卡已关闭-另一个选项卡可以启动套接字连接并更新数据和时间戳。看到这个问题后,我终于实现了共享套接字,并在几天前添加到了我的库中。它似乎适用于大多数浏览器,甚至包括IE6,但Opera除外。对于Opera,可以使用常规检查而不是卸载事件 查看相关问题,网址为 留下饼干
我希望我的回答是有帮助的。我使用localStorage作为共享通信通道,以便使用与EventEmitter相同的界面在选项卡之间发送数据。再加上决定哪个选项卡将连接到服务器的leader选举算法,我将所有socket事件从所有follower选项卡中继到leader选项卡,反之亦然。最后,leader选项卡将所有事件转发到服务器,并将所有接收到的事件广播到所有其他客户端。代码如下:
您需要额外的层进行跨选项卡通信。Tabex有Faye使用的例子。其他websocket传输(socket.io等)也可以以类似方式使用。截至2016年的答案必须如本博客所述:
事实上,这些问题很难避免,例如:网络不稳定时断开连接。毕竟,页面的目的是交换