Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨浏览器选项卡共享websocket?_Javascript_Html_Node.js_Websocket_Web Worker - Fatal编程技术网

Javascript 跨浏览器选项卡共享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的方式似乎没

我们希望每个浏览器有一个套接字,而不是浏览器中每个选项卡有一个套接字。我们如何才能做到这一点?我读到了关于共享网络工作者的文章,这很有希望。我们也非常感谢您的推荐。不幸的是,据我所知,mozilla或internet explorer尚未实现共享web workers。那么在这种情况下该怎么办呢?我们正在服务器端使用node.js。

远不理想,但您可以使用flash本地连接来设置一个websocket连接,然后跨选项卡和多个浏览器共享它


有关更多信息,请参阅。

现在实现socket.io的方式似乎没有解决方案。查看视频第五部分中的吉列尔莫·劳赫。他也认为这是一个挑战。

在某些情况下,我使用localStorage对象在选项卡之间进行通信。localStorage对象有一个事件系统,用于告诉同一来源的另一个选项卡或窗口某些数据已更改()。其思想是,让带有套接字的选项卡将时间戳和接收到的数据写入本地存储。如果时间戳太旧-可能是因为带有套接字的选项卡已关闭-另一个选项卡可以启动套接字连接并更新数据和时间戳。

看到这个问题后,我终于实现了共享套接字,并在几天前添加到了我的库中。它似乎适用于大多数浏览器,甚至包括IE6,但Opera除外。对于Opera,可以使用常规检查而不是卸载事件

查看相关问题,网址为

留下饼干
  • 设置cookie以通知存在共享套接字
  • 套接字关闭时,删除该cookie以通知没有共享套接字
  • 看,

    共享和使用共享套接字
  • 使用存储事件和localStorage-localStorage在设置和删除值时触发存储事件。
  • 检查是否支持StorageEvent和localStorage
  • 添加按键筛选事件的存储事件处理程序。我使用套接字的url作为键
  • 添加删除存储属性的套接字关闭事件
  • 要发出信号,请使用上一个键将数据设置为存储器
  • 分享:

    使用共享:

  • 使用window.open方法-如果我们知道共享窗口的名称,我们可以获取该窗口的引用并访问其属性。
  • 每个浏览器都支持window.open方法,但有些浏览器(如Chrome)禁止访问返回的窗口的属性
  • 获取或创建名称属性为key的iframe。我使用了套接字的url,但请注意IE不允许在iframe标记的name属性中使用非单词字符
  • Iframe的contentWindow是一个共享窗口引用。设置callbacks变量以存储每个窗口的侦听器
  • 要发出信号,只需使用数据调用回调。请注意,IE8及以下版本只允许将字符串传递给其他窗口的函数,共享窗口可能会被破坏
  • 分享:

    使用共享:

  • 在上述实现中,信令是广播的,因此数据应该指示目标。我使用了target属性,p表示父对象,c表示子对象
  • 我使用了其他变量来共享套接字:opened-共享套接字是否打开,children-共享者列表。代码和注释将帮助您了解详细信息

  • 我希望我的回答是有帮助的。

    我使用localStorage作为共享通信通道,以便使用与EventEmitter相同的界面在选项卡之间发送数据。再加上决定哪个选项卡将连接到服务器的leader选举算法,我将所有socket事件从所有follower选项卡中继到leader选项卡,反之亦然。最后,leader选项卡将所有事件转发到服务器,并将所有接收到的事件广播到所有其他客户端。代码如下:


    我仍在为我准备开始建造的设计理论。但是,我正在考虑合并

    -网袋 -本地存储 和 -跨窗口消息传递

    我的理论是用javascript创建一个套接字引擎,它在每个选项卡中的每个页面加载上运行,但如果已经建立了连接,它将关闭

    在第一次访问该站点时,我将让它生成一个GUID并将其存储在本地存储中,该GUID将唯一标识用户的浏览器/登录到其PC

    当套接字服务器接受连接时,它将具有该guid,该guid发出的任何新请求都将返回“999连接已建立”或类似的内容

    一个选项卡运行后,它将通过跨窗口消息传递为其他选项卡植入种子,方法是将我想要共享的accross选项卡的数据转换为JSON blob,然后在其他选项卡中接收时将其转换回对象。因此,无论哪个选项卡获得连接,都将使用套接字服务器处理所有传入/传出消息。然后,它将通过跨窗口消息传递与其他选项卡进行接收/传输。从理论上讲,这也适用于Iframe和弹出窗口

    整个系统将驱动加载表单上的自动数据刷新,用于我们正在构建的类似CRM的系统、实时聊天系统和售票板

    我的梦想场景是,如果用户A盯着票证1000,用户B更新票证1000,我希望用户A的票证刷新,如果用户A在刷新之前做了更改,我希望给他们一个数据迁移弹出窗口,以防止吹走用户B的更改

    --用户B在您编辑此记录时进行了冲突更改 “UserB:FirstName->Bob”[拍摄] “UserA:FirstName->Robert”[保留]

    请参见


    您需要额外的层进行跨选项卡通信。Tabex有Faye使用的例子。其他websocket传输(socket.io等)也可以以类似方式使用。

    截至2016年的答案必须如本博客所述:


    事实上,这些问题很难避免,例如:网络不稳定时断开连接。毕竟,页面的目的是交换