如何实时显示JSP页面中的通知

我需要通过客户端事件向其他用户显示预订通知。 我希望以类似Facebook的方式进行:每当有人通过我的门户进行预订时,我希望将该预订作为弹出窗口显示给正在使用我的应用程序的其他用户。

我怎样才能做到这一点? 我正在使用Spring 3.0,JSP和jQuery。

如评论中所述,您可以使用长轮询(或多或少意味着:客户端向服务器发送请求并保持打开状态,直到服务器响应更新,然后一旦响应收到客户端发送另一个请求)或短轮询(客户端每隔X秒向您的服务器请求更新请求,服务器立即响应是/否)。

Web套接字越来越受欢迎/支持但不支持pre ie10因此取决于您想要支持的浏览器( http://en.m.wikipedia.org/wiki/WebSocket

使用jquery进行短轮询非常简单,只需以任何刷新率向服务器发送请求即可。


编辑

如果您不想使用websockets(例如,因为您必须支持旧版浏览器),那么我建议使用短轮询而不是像彗星这样的传统长轮询方法。

请参阅此处,了解简短的长短轮询评论: https : //stackoverflow.com/a/4714111/258813基本上,如果人们需要立即通知,但是更复杂且内存密集,则长轮询非常有用 – 这意味着每次登录在用户中将与服务器建立打开连接,因此您将受限于服务器将支持的打开连接数。

短轮询目前可能是解决您所描述问题的最常见方法 – 例如,如果您去推特并打开Chrome开发工具/ firebug(您在浏览器上使用的任何开发工具)并等待几秒钟,您将看到ajax请求在后台定期检查更新。

如果你可以应对通知中的几秒延迟,那么短轮询非常简单,这是一个基本的例子:

在页面加载时,在JS中调用它:

setInterval(checkForNotifications, 10000); 

以上将每隔10秒调用一次函数checkForNotifications() (显然,您可以将10秒更改为任何时间长度 – 只需根据您希望用户更新的常规方式调整上述行中的10000)。

然后,在checkForNotifications函数中,只需对服务器进行ajax调用,询问是否有任何更新 – 如果服务器显示yes,则只显示使用JS的警报,如果没有(这将是大部分时间最有可能)然后没做什么:

 function checkForNotifications(){ $.ajax({ url: "your/server/url", type: "GET", success: function( notification ) { //Check if any notifications are returned - if so then display alert }, error: function(data){ //handle any error } }); }