原理:
浏览器和服务器之间保持一个链接,服务端设置超时时间,超时后让客户端重新请求连接。
实现:
1、 浏览器
页面上使用一个iframe保持与服务器端的http长连接,在获取到数据时调用主页面的更新方法。如:
function updata(value){
//dosomething with value
}
内嵌一个iframe,内容主要由服务端实时写入,主要有两个,一个是调用主页面的update方法,一个是调用主页面的重新连接iframe到服务器的方法。
<script type="text/javascript">
window.parent.update("value");//更新主页面
</script>
...
...
<script type="text/javascript">
window.parent.reconnect();//通知主页面重新连接
</script>
首先,在请求的页面上有一个隐藏的iframe,iframe的src是指向服务器的保持长连接的servlet。然后这个servlet一直往iframe的页面上写js语句,就是把要推送的内容做为update的参数传递给主页面。接着在这个请求快过期的时候,在iframe的最后让主页面刷新iframe重新建立长连接。
2、服务端
实现一个支持长连接的Servlet,在处理请求中添加如下代码:
AsyncContext ctx = req.startAsync(request, response);//创建一个异步请求的上下文,在这个上下文中包含了请求的 request和response,可以将这个上下文ctx添加到处理队列中,在服务器需要往客户端推送数据时通过response输出流写到浏览器的iframe中。
ctx.setTimeout();//设置连接超时时间
ctx.addListener(listener);//添加事件监听,主要包括启动事件,超时事件,出错后的事件等等。这里主要实现了超时事件,在超时后提示客户端重新发起长连接请求,这样就能保持连接状态。
附:异步事件监听代码
AsyncContext ctx = request.startAsync(request, response);
ctx.setTimeout(2000);
ctx.addListener(new AsyncListener() {
@Override
public void onTimeout(AsyncEvent event) throws IOException {
HttpServletRequest req = (HttpServletRequest) event
.getSuppliedRequest();
event.getSuppliedResponse().getWriter().append(reconnectfun);
//添加重新连接的函数调用
}
@Override
public void onStartAsync(AsyncEvent event) throws IOException {
}
@Override
public void onError(AsyncEvent event) throws IOException {
}
@Override
public void onComplete(AsyncEvent event) throws IOException {
}
});
分享到:
相关推荐
在本案例中,我们关注的是C#版本的服务端推送代码,该代码是基于Java版本的服务端推送进行翻译的,旨在帮助开发者在C#环境中实现相同的功能。 首先,我们要理解服务端推送的基本概念。服务端推送是指应用程序服务器...
通过学习和实践这个Java服务端推送实例,你可以掌握Pushlet框架的使用,理解服务端推送的基本原理,以及如何解决在推送过程中遇到的中文编码问题。这将对你的Java Web开发技能有所提升,特别是在构建实时应用时,...
极光推送服务端DEMO是...通过研究极光推送服务端DEMO,开发者不仅可以学习到如何使用极光推送服务,还能掌握服务器端与第三方API交互的基本技巧,这对于构建自己的推送系统或者增强现有应用的消息推送功能大有裨益。
**DWR(Direct Web Remoting)技术详解及服务端消息推送至网页的实践** ...通过对`MyDWRSample`项目的分析和实践,初学者可以快速掌握DWR的基本用法和服务端推送的实现,为进一步深入学习和应用打下坚实的基础。
基于MQTT的推送服务端在Java中的实现是一个常见需求,尤其在实时数据传输和设备通信场景中。本教程将深入探讨如何在Java中构建一个MQTT服务器,结合提供的描述和标签,我们将主要关注以下几个知识点: 1. **MQTT...
在Web开发中,服务器向客户端实时推送数据是常见...在名为"serverPush"的压缩包文件中,可能包含了实现上述各种服务器推送方式的JAVA代码示例,开发者可以通过阅读和学习这些代码,进一步理解并掌握服务器推送的技术。
极光推送(JPush)是阿里云推出的一款高效、稳定、易用的移动推送服务,它可以帮助开发者向iOS、...通过学习和使用这个项目,开发者不仅可以掌握极光推送的基本用法,还能深入理解如何在C#环境下构建服务端推送系统。
代码规范清晰。非常适合学习。 wcf实现服务端主动向客户端推送消息
如果包含源代码,那么这将是一个学习极光推送服务端工作原理的好机会,同时也方便了开发者对推送逻辑进行调试和优化。 总的来说,"极光推送模拟服务端APP"是一个强大的开发工具,它能帮助开发者在推送服务端进行...
通过阅读和理解项目的源代码,我们可以学习到如何在实际环境中实现高效稳定的iOS推送服务。 总结来说,构建一个支持iOS推送的Java服务器端涉及到苹果证书的获取、Java推送库的使用、消息构建和发送、错误处理以及...
在Comet4j中,服务端推送消息至指定用户的关键在于用户标识管理和订阅机制。每个用户在连接时通常会携带一个唯一的标识,比如用户ID,服务端通过这个标识可以识别并区分不同的用户。当需要向特定用户推送消息时,...
通过这个项目,开发者不仅可以学习到如何使用C#语言构建APNs推送服务,还能了解到Windows服务的开发和部署,这对于构建稳定的后台系统非常有帮助。同时,对于iOS开发者来说,理解服务端的实现也有助于更好地集成和...
【百度推送服务端】是百度提供的一项用于向移动设备或者Web应用实时推送消息的服务,它可以帮助开发者高效地实现消息的即时通讯功能。该服务端代码是实现与百度推送服务器交互的关键,提供了各种接口和示例,便于...
6. **服务端推送消息**:当服务端有新的消息时,它可以使用保存的客户端回调对象调用相应的回调方法,从而将消息推送到客户端。 这个压缩包的文件名称“WCFCrm”可能表示这是一个基于WCF的客户关系管理(CRM)系统...
在IT行业中,服务端集成JPush推送通知是一个常见的任务,特别是在构建移动应用时,为了提供实时的用户交互和消息传递,开发者通常会采用第三方推送服务,如JPush(极光推送)。本文将深入探讨如何在服务端集成JPush...
总之,本项目覆盖了即时通讯的全栈开发,从服务端到客户端,从消息推送至用户交互,都进行了详尽的实现。通过这个项目,开发者不仅可以学习到Android即时通讯系统的构建,还能掌握服务端开发、消息队列、WebSocket...
在这个项目中,开发者将能够学习到如何在C#服务端集成极光推送API V3,以便向目标设备发送推送消息。API V3相较于早期版本,提供了更多的功能和优化,例如更精细的用户定向、更强大的消息格式支持等。 首先,你需要...
【苹果iOS推送Java服务端详解】 在iOS应用开发中,苹果提供了远程通知(Apple Push Notification service,简称APNs)服务,使得开发者可以向用户的设备发送消息,即使应用没有在前台运行也能接收到这些消息。本篇...
总结来说,友盟推送服务端代码DEMO是学习和实践友盟推送服务的关键资源,它涵盖了从消息创建、目标设定到发送和反馈的全过程,对于提升移动应用的推送能力具有重要意义。通过深入研究和实践这个DEMO,开发者可以更好...
通过学习和使用这份"华为推送服务服务端Python示例代码",开发者能够快速掌握如何利用Python与华为推送服务进行交互,实现在不同场景下的消息推送功能。同时,结合OpenHarmony的特性,开发者也可以将这些技术应用到...