- 浏览: 1320074 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
近来由于毕业设计,一直在忙于comet技术的研究,有了一些心得和想法,特来与大家分享。
Comet技术被称为下一代Ajax技术,主要通过实现server push来解决ajax需要定时频繁发送请求的问题。
通过Comet技术,客户端所需要的response信息不再需要主动的去索取,而是在服务器端以event的形式推至客户端。
Comet 技术常见的实现方式
streaming和long polling
long poll:HTTP的连接保持,直到server端一个事件触发或者到达timeout事件。client端在收到response消息后,一个新的 HTTP请求会立刻开放。通过这种方式,server端可以将数据在任何时候push到客户端。
streaming:在streaming方式中,HTTP的连接是始终保持的,即使客户端收到响应,HTTP连接也不断开。
Tomcat 与Comet
在Tomcat 6中,增加了对Comet的支持,但是其自带例子(/webapps/examples/jsp/chat)有很多问题,没有运行成功,怀疑该例并不完整 (我的版本Tomcat 6.0.16),经过学习和研究,发现了一些问题,希望能给仍然奋战在其中的朋友一些帮助。
前期准备: 使用tomcat提供的comet api之前,需要增加对NIO的支持,配置nio可是相当方便,要做的仅仅是在server.xml里边修改connector:
<connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8080" redirectport="8443" connectiontimeout="20000">
Tomcat 6提供了CometProcessor和CometEvent接口,具体功能和操作不再赘述,详情请见http://tomcat.apache.org/tomcat-6.0-doc/aio.html 。 注意:实现CometProcessor接口后不用在servlet中写doGet,doPoset方法,所有事件在 BEGIN,READ,END,ERROR中实现。
简单的Comet servlet代码示例:
<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 import java.io. * ;
2 import javax.servlet.ServletException;
3 import javax.servlet.http. * ;
4 import org.apache.catalina.CometEvent;
5 import org.apache.catalina.CometProcessor;
6 import org.apache.catalina.CometEvent.EventType;
7
8 public class cometServlet extends HttpServlet implements CometProcessor {
9
10 public void event(CometEvent e) throws IOException, ServletException {
11 if (e.getEventType() == EventType.BEGIN) {
12 // fill in code handling here
13 HttpServletResponse response = e.getHttpServletResponse();
14 PrintWriter out = response.getWriter();
15 out.write( " Hello world " );
16 out.flush();
17 // System.out.println("message sent");
18 }
19 if (e.getEventType() == EventType.READ) {
20 // fill in code handling here
21 }
22 // and continue handing other events
23 }
24 }
在此源代码中,仅完成向客户端发送Hello World字符串的功能,关键点,out.flush()不可缺少,以往在写ajax程序的时候,往往忽略写这句话,但这里如果不写,客户端无法收到响应 文字。由于tomcat采用streaming的方式实现comet,不知是否不加这句话的时候,客户端不知道你的消息已经结束,而始终处于一个等待的状 态(如果您有更专业的解释,请指教)。
服务器端javascript相关代码:
<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 < script >
2 function CometEx() {
3 var request = new XMLHttpRequest();
4 request.open( " GET " , ' http://localhost:8080/cometEx/cometServlet ' , true );
5 request.onreadystatechange = function() {
6 if (request.readyState == 3 && request.status == 200 ) {
7 alert(request.responseText);
8 }
9 }
10 request.send( null );
11 }
12 </ script >
服务器端代码类似与普通Ajax代码,其中,需要注意的是:request.readyState值如果设置为4,浏览器会处于长期等待状态,而收不到响 应消息,设置为3后,firefox浏览器正常,但IE不能正常获得消息,由于在学习过程中,要求只用到firefox浏览器,并未对IE浏览器进行更深 一步的研究(希望高手可以提供IE浏览器解决方案,谢谢)。
发表评论
-
JavaScript初学者应注意的七个细节
2011-01-16 22:34 1080每种语言都有它特别的地方,对于JavaScript来说,使 ... -
META功能总结
2011-01-07 21:13 4636一、META的作用: meta标签通常用来为搜索引擎ro ... -
修改tomcat6配置,快速实现主域名、二级域名之间session共享
2010-12-02 22:04 2952项目中遇到了每个用户一个二级域名的应用,但在主域名登录后,在 ... -
实践中整理出tomcat集群和负载均衡
2010-11-25 23:33 1154(一)环境说明 (1)服务器有4台,一台安装apac ... -
httpsession的原理及负载均衡
2010-11-15 12:06 13519前阵子去面试正好被问到httpsession和cookie,今 ... -
Apache负载均衡+Tomcat集群
2010-10-26 21:56 1381核心提示:目标 : 使用 apache 和 tomcat ... -
Spring Ldap 域认证
2010-10-26 21:17 4449核心提示:近段时间接触了一个项目,用户认证部分是通过域认证 ... -
Spring + Tomcat 中配置连接池
2010-10-26 21:12 4820核心提示:Tomcat5 及 Tomcat6 下CP配置。 主 ... -
基于总线的消息服务(BBMS)的设计与实现
2010-10-26 21:09 2569核心提示:前言 异步事件的通知机制在比较有规模的软件设计中 ... -
JSON --- JAVA 使用方法
2010-10-25 22:51 1139JSON 即 JavaScript Object Natati ... -
大型门户网站架构分析
2010-10-24 15:48 5159千万人同时访问的网站,一般是有很多个数据库同时工作,说明白一点 ... -
fck config
2010-10-19 10:48 1507写道 * * FCKeditor - The text ... -
功能强大的fck编辑器(完整详解)
2010-10-19 10:39 3678一直都没找到完整的Fck ... -
ORACLE中的ROWID
2010-10-14 16:36 10721、rowid是一个伪列,是用来确保表中行的唯一性,它 ... -
FCKeditor在线编辑器
2010-10-14 16:20 1551FCKeditor在线编辑器 FCKeditor 这个开源 ... -
用java获取真实的ip地址
2010-10-14 16:18 2174在JSP里,获取客户端的IP地址的方法是:reques ... -
实践中整理出tomcat集群和负载均衡
2010-10-14 15:50 1131实践中整理出tomcat集群 ... -
关于MapleFetion
2010-07-28 17:40 1805http://code.google.com/p/maplef ... -
jfreechart
2010-06-28 18:13 1430http://dev.firnow.com/course/3_ ... -
Java中如何实现Comet风格的Web应用(二)
2010-03-30 17:00 2825CometProcessor 接口要求实现 event 方法 ...
相关推荐
tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不...
comet框架例子项目,自己写的一个参考例子供大家学习
通过tomcat服务器,向网页发送即时消息。comet的小例子,可以直接运行,用tomcat6.0。
comet4j,comet4j实例,实例代码,可直接运行
comet4j完整包、comet4j.js、comet4j-tomcat6.jar、comet4j-tomcat7.jar
comet4j消息推送所需的comet4j-tomcat7.jar包,comet4j-tomcat7.jar
comet4j-tomcat7.jar comet4j.js Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架
comet4j-tomcat6、comet4j-tomcat7 的jar包和comet4j.js资源下载
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式 文件包含comet4j-tomcat6.jar , comet4j-tomcat7.jar , comet4j.js...
包含comet4j-tomcat6.jar,comet4j-tomcat7.jar,comet4j.js,以及官网demo:comet4j-tomcat6-demo.war
java-comet
ssh框架整合comet实现即时通信的简单实例,ssh框架整合comet实现即时通信的简单实例
comet4j消息推送所需的comet4j.js文件、comet4j-tomcat6.jar、comet4j-tomcat7.jar包
comet4j-tomcat6,comet4j-tomcat7,comet4j.js,comet4j.js,以及一个样例
comet4j开发指南 Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架
有关comet4j的所有jar包都在这里了,tomcat6,tomcat7的都有,js和一个demo.war案例
asp.net comet例子,基于ajax的长联技术, 注:此版本只有ff下正常 ie下可以用iframe实现 http://www.dotnetdev.cn
demo是采用comet的web推送技术,使用tomcat7做服务器,内含tomcat7上面配置说明,在MyEclipse、tomcat7上面完美运行,本人亲测!
comet两种实现之一的ajax实现,内部有源代码,这是一个聊天室的例子
压缩包中包含comet4j向客户端主动推送所需要的jar包和js(comet4j-tomcat6.jar、comet4j-tomcat7.jar、comet4j.js)