我需要通过客户端事件向其他用户显示预订通知。我希望以类似Facebook的方式进行:每当有人通过我的门户进行预订时,我希望将该预订作为弹出窗口显示给正在使用我的应用程序的其他用户。
我怎样才能做到这一点?我正在使用Spring 3.0,JSP和jQuery。
答案 0 :(得分:4)
如评论中所述,您可以使用长轮询(或多或少意味着:客户端向服务器发送请求并保持打开状态,直到服务器响应更新,然后一旦响应收到客户端发送另一个请求)或短轮询(客户端每隔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
}
});
}