2010-01-28 59 views
1

我为jQuery使用类似咆哮的插件向用户发送实时消息以在网站上共享活动。现在我只更新自用户上次访问该站点后发生的通知的用户。但是,当我在站点上打开多个选项卡时,由于选项卡可以在其他选项卡获取它们之前刷新通知,所以只有一些选项卡会收到通知,这是因为长轮询请求。跟踪实时通知发送给用户的最佳方式是什么?

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

谢谢。

+0

[Comet and jQuery]的可能重复(http://stackoverflow.com/questions/136012/comet-and-jquery) – 2012-07-21 00:26:07

回答

0

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

因此,您可以通过网络套接字或任何其他方式将您的通知发送到客户端,处理程序会将它们推送到此缓冲区。 说,当用户打开它,这样会像

[ 
    notification1, 
    notification2 
    // etc. 
] 

每个窗口(标签)的阵列应该在localStorage的注册:

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

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

相关问题