javascript - 跟踪发送给用户的实时通知的最佳方式是什么?

标签 javascript jquery notifications

我正在使用一个类似咆哮的 jQuery 插件,向用户发送实时消息以共享网站上的事件。现在,我仅向用户更新自用户上次访问网站以来发生的通知。但是,当我在网站上打开多个选项卡时,由于长轮询请求,只有某些选项卡会收到通知,因为选项卡可以在其他选项卡收到通知之前刷新通知。

实现每个选项卡同时显示消息的通知系统的最佳方法是什么?也许也是为了保持一定程度的持久性,例如,即使用户导航到不同的页面,通知也会在页面上保留 15 秒?

最佳答案

您可以使用window.localStorage对象作为选项卡/窗口之间共享的通知缓冲区。 为了确保跨浏览器兼容性,您还可以使用 store.js库而不是直接处理 localStorage。

因此,您可以通过网络套接字或任何其他方式将通知发送给客户端,处理程序会将它们推送到此缓冲区。 假设这将是一个像这样的数组

[
    notification1,
    notification2
    // etc.
]

当用户打开每个窗口(选项卡)时,应该在 localStorage 中注册它,例如:

{
    wnd_<timestamp_of_window1_onload_event>: 1
    wnd_<timestamp_of_window2_onload_event>: 1
}

在每个窗口(选项卡)中,您可以使用 window.setInterval 函数每 N 毫秒检查一次缓冲区是否有新通知。 setInterval 调用的函数将从缓冲区读取新通知并显示它们。 在 window.onbeforeunload 处理程序中,您将从 localStorage 中的 windows 集合中取消注册当前窗口。如果当前窗口注销后窗口集合变空,您可以清空通知缓冲区。 当然,这是一个简短的解决方案,也许您需要考虑在所有窗口关闭之前从缓冲区中删除已弃用的(由所有窗口处理的)通知。

关于javascript - 跟踪发送给用户的实时通知的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153477/

相关文章:

javascript - 异步函数会阻塞执行

javascript - 在相同的 tr jQuery 中获取 td 的值

javascript - 有没有办法从元素中获取 SlickGrid 的实例

javascript - 无法刷新页面并保持jsp页面上的选定值

objective-c - UILocalNotification 添加和删除

windows - 使用 Ctrl+Alt+Del 获取通知

iOS 如何在前台显示本地通知?

javascript - 有没有办法从 JS 或 PHP 中的 Google Drive 链接中找出 mime 类型?

javascript - 从 Blender 导出到三个带有纹理的 js

javascript - 如何从 View (cshtml 文件)调用 JS 函数以转到 Bootstrap 轮播控件中的特定幻灯片?