我需要通过客户端事件向其他用户显示预订通知。我想以类似 facebook 的方式进行操作:每当有人通过我的门户网站进行预订时,我希望该预订以弹出窗口的形式显示给正在使用我的应用程序的另一个用户。
我怎样才能做到这一点?我正在使用 Spring 3.0、JSP 和 jQuery。
我需要通过客户端事件向其他用户显示预订通知。我想以类似 facebook 的方式进行操作:每当有人通过我的门户网站进行预订时,我希望该预订以弹出窗口的形式显示给正在使用我的应用程序的另一个用户。
我怎样才能做到这一点?我正在使用 Spring 3.0、JSP 和 jQuery。
正如评论中所说,您可以使用长轮询(或多或少意味着:客户端向服务器发送请求并保持打开状态,直到服务器响应更新,然后一旦收到响应,客户端就会发送另一个请求)或短轮询(每 X 秒,您的客户端向您的服务器发送一个请求以请求更新,服务器立即以是/否响应)。
Web 套接字越来越受欢迎/支持,但在 ie10 之前不受支持,因此取决于您想要支持的浏览器 ( http://en.m.wikipedia.org/wiki/WebSocket )
使用 jquery 进行短轮询非常简单,并且可以以任何刷新率向您的服务器发送请求。
编辑
如果您不打算使用 websockets 之类的东西(例如,因为您必须支持较旧的浏览器),那么我建议您使用短轮询而不是传统的长轮询方法,例如彗星。
请参阅此处以获得简洁的长轮询与短轮询评论:https ://stackoverflow.com/a/4714111/258813 基本上,如果需要立即通知人们,长轮询很有用,但更复杂且内存密集 - 这意味着每个记录in user 将与服务器建立开放连接,因此您将受到服务器支持的开放连接数量的限制。
短轮询目前可能是解决您描述的问题的最常用方法 - 例如,如果您访问 twitter 并打开 chrome 开发人员工具/firebug(无论您在浏览器上使用什么开发工具)并等待几秒钟,您将看到ajax 请求在后台定期检查更新。
如果你能应付几秒钟的通知延迟,那么短轮询真的很简单,这里有一个基本的例子:
在页面加载时,在您的 JS 中调用它:
setInterval(checkForNotifications, 10000);
上面将每 10 秒调用一次函数checkForNotifications()
(显然,您可以将 10 秒更改为任意时间长度 - 只需根据您希望用户更新的频率调整上述行中的 10000)。
然后,在您的checkForNotifications
函数中,只需对您的服务器进行 ajax 调用,询问是否有任何更新 - 如果服务器说是,则只需使用 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
}
});
}