AngularJS - 在选项卡/窗口之间共享一个 websocket

Posted

技术标签:

【中文标题】AngularJS - 在选项卡/窗口之间共享一个 websocket【英文标题】:AngularJS - share a websocket between tabs/windows 【发布时间】:2017-05-31 12:33:30 【问题描述】:

我正在使用angular-websocket打开一个WebSocket,应用程序正在等待消息,然后显示一个网络通知。

我注意到,当打开超过 1 个选项卡时,会有很多连接,然后每个选项卡都会收到一条消息,并且通知会在应该显示一次时显示 1 X TABS_NUM

我认为要使其正常工作,我需要为整个应用打开 1 个 WebSocket。

有什么想法吗?这种情况我该怎么办?

【问题讨论】:

每个窗口都是客户端应用程序的一个单独实例。真的不清楚你在寻找什么行为 我有一个发送通知的 websocket。但是,如果客户有 2 个打开的标签,则为客户发送 2 个相同的通知是不对的……在这种情况下我该怎么办 你不能在一个标签中读取消息时发出一条消息,然后其他标签就知道了吗? @charlietfl 你能解释一下吗? 你在使用Notifications API吗?如果是这样,tag 通知也可以避免重复。如果不是...显示更多详细信息 【参考方案1】:

使用tag 解决了我的问题:

用户通常不希望收到大量通知 在很短的时间内——例如,如果一个信使怎么办? 应用程序通知用户每条传入的消息,他们是 被发送了很多?避免向用户发送过多的垃圾邮件 通知,可以修改待处理的通知 队列,用新的替换单个或多个待处理通知 一个。

为此,可以为任何新通知添加标签。如果一个 通知已经具有相同的标签并且尚未显示, 新通知将替换之前的通知。如果 已显示具有相同标签的通知,则 上一个通知已关闭并显示新通知。

new Notification(notificationMessage.title, tag: notificationMessage._id);

【讨论】:

以上是关于AngularJS - 在选项卡/窗口之间共享一个 websocket的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs 1.5.x 在组件之间与服务共享数据

会话在选项卡之间共享

无法在选项卡视图控制器之间共享数据?

使用 JavaScript 在窗口/选项卡之间进行通信 [重复]

如何在作为选项卡的 2 个片段之间共享视图模型

两个浏览器选项卡之间的共享变量范围? [复制]