comet是服务器“推”技术的的一种实现,apache-tomcat提供了comet的支持。
下面来说说comet的工作原理:
Comet主要是利用客户端向服务器发出请求时,服务器发回响应内容,并利用javascript建立一个长时间链接的“长连接”,这个连接在没有接收到服务器或者没有到达连接时间限制时会一直等待服务器的消息,如果服务器有消息传来,立即显示最新信息。长连接每隔一段时间会重新向服务器发出连接请求。服务器在有新消息产生的时候立即检查消息的接收方是否存在长连接,如果存在马上发送,如果没有则不发送。
服务器的comet实现,需要继承HttpServlet类,实现org.apache.catalina.CometProcessor接口,服务器在收到客户端的请求时会调用CometProcessor接口的event方法,把一个org.apache.catalina.CometEvent对象传给event()。CometEvent有四个状态:CometEvent.EventType.BEGIN、CometEvent.EventType.ERROR、CometEvent.EventType.END、CometEvent.EventType.READ。服务器根据请求的状态来向客户端发送相应的数据。
原理大概就是这样,具体实现还需要一个MessageSender来不断的检查消息容器中是否存在数据,有则马上发送,没有就等待;一个connectorCleaner来不断的检查客户端的连接是否超时了,如果超时则断开,等客户端重新发来长连接。
客户端的comet实现,由于浏览器的类型和版本不一致,所以客户端需要实现两种不同的comet,一种是iframe长连接,一种是stream长连接。Iframe用于基于ie内核的浏览器,由于ie内核不支持stream长连接,所以用iframe长连接解决。客户端在向服务器请求数据时,服务器会返回一个带有隐藏iframe的页面,这个iframe每隔一段时间就向服务器发出数据请求以保持长连接,称为“心跳”。Stream是firefox的comet实现,stream支持连接状态的查询,即像CometEvent那样可以查询到连接的状态,并根据状态做不同的操作。Stream长连接将自动与服务器连接,不需像ie内核的浏览器那样需要通过iframe的刷新去重新建立连接。
Apache-tomcat对comet的支持,需要修改server.xml的配置,加入:
<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
至此comet就能够实现了
分享到:
相关推荐
PHP防Sina微薄无刷新服务器推送(comet)原理,防微薄无刷新
服务器推comet4j
java comet服务器推送使用步骤及例子
Comet服务器推送技术
Comet 有时也称反向 Ajax 或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会...
它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的能力,而你仅需要在服务器端调用Comet4...
Comet:基于 HTTP 长连接的“服务器推”技术
通过tomcat服务器,向网页发送即时消息。comet的小例子,可以直接运行,用tomcat6.0。
Comet:基于_HTTP_长连接的“服务器推”技术 Comet:基于_HTTP_长连接的“服务器推”技术 Comet:基于_HTTP_长连接的“服务器推”技术 简介
NULL 博文链接:https://justcoding.iteye.com/blog/1497445
Comet-服务器推送解决方案.docx
Servlet3.0 异步处理 页面推送 Comet 实例
demo是采用comet的web推送技术,使用tomcat7做服务器,内含tomcat7上面配置说明,在MyEclipse、tomcat7上面完美运行,本人亲测!
此资源包中包含了tomcat7所需要的jar包与comet4j.js请各位自取,谢谢!
NULL 博文链接:https://zkeshun.iteye.com/blog/1391922
comet4j 自己写的消息推送 觉得实用
代码中含有一个文档,文档包含必须的配置、运行的结果和分析,适合初学者查看