jquery - 如何在JSP页面中实时显示通知

标签 jquery spring jsp notifications

我需要向其他用户显示有关客户端事件预订的通知。我想以类似 facebook 的方式做到这一点:每当有人通过我的门户进行预订时,我希望该预订以弹出窗口的形式显示给正在使用我的应用程序的其他用户。

我怎样才能实现这个目标?我正在使用 Spring 3.0、JSP 和 jQuery。

最佳答案

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

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

使用 jquery 进行短轮询非常简单,并且可以以任何刷新率向服务器发出 ajax 请求。

<小时/>

编辑

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

请参阅此处,了解简洁的长与短投票评论:https://stackoverflow.com/a/4714111/258813基本上,如果人们需要立即得到通知,长轮询是有用的,但它更复杂并且占用内存 - 这意味着每个登录的用户都将有一个到服务器的开放连接,因此您的服务器将限制打开连接的数量支持。

短轮询目前可能是解决您所描述的问题的最常见方法 - 例如,如果您转到 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 
        }
    });
}

关于jquery - 如何在JSP页面中实时显示通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119574/

相关文章:

jquery - 滚动经过 x 像素后执行函数

java - 如何以一定的速率消费者QueueChannel?

jsp - Struts 2 自定义 404 错误页面从不显示

javascript - CURL JSESSIONID 问题

java - 考虑将其中一个 bean 标记为 @Primary

java - 我必须为android创建谷歌地图,但我目前拥有的代码是在.net中开发的java脚本中

javascript - 如何使用 <ul> 列表而不是 <select> 下拉列表作为语言切换器?

jquery - Fullcalendar jQuery - 可以从谷歌日历检索颜色吗?

javascript - 折叠导航栏不适用于 HTML、CSS 和 JavaScript

java - Maven Web 项目未加载 spring 上下文 xml 文件