java comet是什么,让我们一起了解一下?
comet是基于HTTP长连接的“服务器推”技术,是一种新的Web应用架构。基于Java的成熟的服务器推送框架有 DWR ,另外comet的应用主要体现在股票系统和实时通讯。
Comet有以下两种实现方式:
1、长轮询(long-polling):用JS发送Ajax请求,但是服务器不会立马响应,直到服务器有消息给客户端时再响应,响应完成后连接关闭,客户端立即再次发送请求,等待响应。
2、流(streaming):和上面long-polling不同的是,服务器发完消息后,不会关闭连接,而是保持HTTP连接继续等待下一条消息。这样客户端不用每次收到消息连接关闭后再次请求。
这种方式的原理是HTTP协议响应头的一个Header:Transfer-Encoding: chunked。普通的HTTP响应头中会有Content-Length表示整个响应的字节大小,浏览器接收到所有的响应数据才会加载内容。而设置Transfer-Encoding: chunked后表示响应大小不固定,浏览器接收到一点响应数据就加载一点。基于流的Comet后台实现是一样的,但是前端会有几种不同的方式:iframe流和针对FireFox的方式。
那么实际操作中,Comet是如何实现的?(以长轮询为例)
前端页面:
后台Servlet:
public class CometServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 这里用Thread.sleep来模拟comet,相当于每隔5秒服务器向客户端推送一条消息 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println("helloworld
"); }
在浏览器中打开html页面,可以看到每隔5秒服务器向客户端推送一个helloworld字符串。而接收到字符串HTTP连接就断开了,然后Ajax再立即发出请求等待服务器的下次响应。
以上就是小编今天的分享了,希望可以帮助到大家。