原理:
浏览器和服务器之间保持一个链接,服务端设置超时时间,超时后让客户端重新请求连接。
实现:
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 {
}
});
分享到:
相关推荐
代码规范清晰。非常适合学习。 wcf实现服务端主动向客户端推送消息
KJPush是一个Android推送框架,目标是让Android开发者一人无需与服务端开发者交流也能完成推送功能开发.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
comet4j的技术来实现推送消息到web页面,可以直接导入,直接运行的,里面包含了项目所需要的comet4j-tomcat7.jar(tomcat7的就导入这个),comet4j.js(页面引入这个js),等jar包,对于想要学习comet推送机制的童靴是很...
Android应用源码开发Demo,主要用于毕业设计学习。
基于MQTT的安卓消息推送php服务端源码安卓端源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
此源码是极光推送的服务器端代码,此代码只有推送服务的功能,具体的商业逻辑要根据每个人不同的商业逻辑进行改写。有需要的朋友可以下载研究一下。注意事项: 1、开发环境为Visual Studio 2008,无数据库,使用...
android 源码学习
基于MQTT的安卓消息推送php服务端源码+安卓端源码.zip安卓程序项目源码资源下载基于MQTT的安卓消息推送php服务端源码+安卓端源码.zip安卓程序项目源码资源下载 1.适合学生做毕业设计用 2.适合程序员学习研究用 3....
这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2....三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解原理和简单的例子,让学者更好的掌握,希望能帮助到大家!
一个Android消息推送系统,包括Android客户端和服务端的实现。客户端支持长连接和短连接方式,长连接采用MQTT协议,短连接采用HTTP协议。服务端整合到web项中目中,有一个简单的界面进行操作处理。 软件开发设计:...
Android应用源码之基于MQTT的安卓消息推送php服务端源码+安卓端源码.zip项目安卓应用源码下载Android应用源码之基于MQTT的安卓消息推送php服务端源码+安卓端源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
毕设&课设&项目&实训-基于SuperSocket实现客户端与客户端的消息推送以及服务端与客户端互发心跳数据包维持长连接、离线消息存储并转发 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息...
百度云推送,java服务端的sdk代码!学习云推送的拿走!谢谢
主要给大家介绍了关于Node.js学习教程之HTTP/2服务器推送的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
分享一个自己曾经写的jpush服务端.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
一个非常简洁的 Golang Websocket 推送中心 Demo,代码清晰易懂...2. 服务端给客户端推送消息,只需要通过 HTTP 接口。 如果你想学习 Golang 或者用 Golang 来做 Websocket 应用,那么这个 Demo 都是一个很好的选择。
Android应用设计源码安卓实例源代码,可供学习及设计参考。