首页 > 解决方案 > 多个选项卡的冗余 HTML 通知

问题描述

我的页面使用 socket.io 进行实时通知。它运作良好。但是,打开多个选项卡(即https://mypage.com/https://mypage.com/settingshttps://mypage.com/list)会导致多个通知。

我知道 facebook web 使用新帖子或新消息的通知,并且该通知是独一无二的。(尽管有几个标签!)我想知道这怎么可能。

我尝试通过 ip 对套接字进行分类并向其中一个发送通知。但它并不华丽。

有没有其他方法或策略来获得独特的通知?

标签: javascripthtmlnotifications

解决方案


在服务器端,我添加了标识每个通知的“通知计数”,并使用原始数据提供该值。

在客户端,使用 localStorage 在选项卡之间共享“noti count”值,验证此通知事件是否已显示。

localStorage.getItem 和 localStorage.setItem 很慢,并且套接字事件同时到达,因此来自 localStorage 的“noti count”值不会被其他选项卡更新。

我为每个事件添加了 setTimeout 等待 0~10000 毫秒。最后,socket 显示了唯一的通知!

但是当随机超时彼此相似时,getItem 会在 setItem 更新“通知计数”之前获取值。在这种情况下,显示冗余通知。(起初,我将随机超时设置为 0~1000,显示了很多冗余通知)增加随机超时的最大值会增加稳定性到不幸的是类似的超时。但也增加了秩序保障的风险。

为确保通知顺序,添加通知队列并调整随机超时以弹出通知。


推荐阅读