`
greg0827
  • 浏览: 1848 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

服务端推送学习

    博客分类:
  • java
 
阅读更多

原理:

浏览器和服务器之间保持一个链接,服务端设置超时时间,超时后让客户端重新请求连接。

实现:

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 {
			}
		});
分享到:
评论
2 楼 wahahachuang8 2017-09-26  
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的推送,我们项目用的就是GoEasy推送,他们提供的OTP (one-time-password)能有效杜绝他人通过在页面上获取 appkey的方式,进行非法操作,十分安全!此外GoEasy目前除了在中国有服务器外还在美国,新加坡也开了服务器来支持外海推送的需求,据他们客服说接下来还会有更多的机房在世界各地……如果有全球推送需求的项目可以考虑它。
1 楼 enjiex 2012-04-06  
勇哥很强大,我又有了新的博客,欢迎光临:enjiex.blogbus.com

相关推荐

Global site tag (gtag.js) - Google Analytics