`
cobra
  • 浏览: 50798 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Tomcat 6支持的Comet

    博客分类:
  • Ajax
阅读更多

今天在测试中无意中看到Tomcat 6的新特性Comet,使用Comet技术可以轻松实现一个Pushlet的功能,让我看了着实兴奋不已,而其官方网站还给出了一个Messenger的例子。

  1. public class ChatServlet
  2. extends HttpServlet implements CometProcessor {
  3.  
  4. protected ArrayList<HttpServletResponse> connections =
  5. new ArrayList<HttpServletResponse>();
  6. protected MessageSender messageSender = null;
  7. public void init() throws ServletException {
  8. messageSender = new MessageSender();
  9. Thread messageSenderThread =
  10. new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]");
  11. messageSenderThread.setDaemon(true);
  12. messageSenderThread.start();
  13. }
  14.  
  15. public void destroy() {
  16. connections.clear();
  17. messageSender.stop();
  18. messageSender = null;
  19. }
  20.  
  21. /**
  22. * Process the given Comet event.
  23. *
  24. * @param event The Comet event that will be processed
  25. * @throws IOException
  26. * @throws ServletException
  27. */
  28. public void event(CometEvent event)
  29. throws IOException, ServletException {
  30. HttpServletRequest request = event.getHttpServletRequest();
  31. HttpServletResponse response = event.getHttpServletResponse();
  32. if (event.getEventType() == CometEvent.EventType.BEGIN) {
  33. log("Begin for session: " + request.getSession(true).getId());
  34. PrintWriter writer = response.getWriter();
  35. writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
  36. writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
  37. writer.flush();
  38. synchronized(connections) {
  39. connections.add(response);
  40. }
  41. } else if (event.getEventType() == CometEvent.EventType.ERROR) {
  42. log("Error for session: " + request.getSession(true).getId());
  43. synchronized(connections) {
  44. connections.remove(response);
  45. }
  46. event.close();
  47. } else if (event.getEventType() == CometEvent.EventType.END) {
  48. log("End for session: " + request.getSession(true).getId());
  49. synchronized(connections) {
  50. connections.remove(response);
  51. }
  52. PrintWriter writer = response.getWriter();
  53. writer.println("</body></html>");
  54. event.close();
  55. } else if (event.getEventType() == CometEvent.EventType.READ) {
  56. InputStream is = request.getInputStream();
  57. byte[] buf = new byte[512];
  58. do {
  59. int n = is.read(buf); //can throw an IOException
  60. if (n > 0) {
  61. log("Read " + n + " bytes: " + new String(buf, 0, n)
  62. + " for session: " + request.getSession(true).getId());
  63. } else if (n < 0) {
  64. error(event, request, response);
  65. return;
  66. }
  67. } while (is.available() > 0);
  68. }
  69. }
  70.  
  71. public class MessageSender implements Runnable {
  72.  
  73. protected boolean running = true;
  74. protected ArrayList<String> messages = new ArrayList<String>();
  75. public MessageSender() {
  76. }
  77. public void stop() {
  78. running = false;
  79. }
  80.  
  81. /**
  82. * Add message for sending.
  83. */
  84. public void send(String user, String message) {
  85. synchronized (messages) {
  86. messages.add("[" + user + "]: " + message);
  87. messages.notify();
  88. }
  89. }
  90.  
  91. public void run() {
  92.  
  93. while (running) {
  94.  
  95. if (messages.size() == 0) {
  96. try {
  97. synchronized (messages) {
  98. messages.wait();
  99. }
  100. } catch (InterruptedException e) {
  101. // Ignore
  102. }
  103. }
  104.  
  105. synchronized (connections) {
  106. String[] pendingMessages = null;
  107. synchronized (messages) {
  108. pendingMessages = messages.toArray(new String[0]);
  109. messages.clear();
  110. }
  111. // Send any pending message on all the open connections
  112. for (int i = 0; i < connections.size(); i++) {
  113. try {
  114. PrintWriter writer = connections.get(i).getWriter();
  115. for (int j = 0; j < pendingMessages.length; j++) {
  116. writer.println(pendingMessages[j] + "<br>");
  117. }
  118. writer.flush();
  119. } catch (IOException e) {
  120. log("IOExeption sending message", e);
  121. }
  122. }
  123. }
  124.  
  125. }
  126.  
  127. }
  128.  
  129. }
  130.  
  131. }

分享到:
评论
1 楼 xanodu 2009-01-07  
108connections是什么?

相关推荐

    comet4j-tomcat6,comet4j-tomcat7,comet4j.js,以及一个样例

    2. 配置Tomcat服务器,启用Comet支持。这可能需要修改Tomcat的server.xml文件,添加特定的监听器和处理程序。 3. 在Java后端,创建Comet4J处理类,该类负责处理客户端的连接并推送数据。 4. 使用`comet4j.js`在前端...

    comet4j 所需js以及comet4j-tomcat6.jar、comet4j-tomcat7.jar包

    开发者需要将这些JAR文件添加到Tomcat的lib目录下,以便Tomcat在启动时自动加载,从而支持Comet4j的HTTP长连接特性。值得注意的是,`comet4j-tomcat6.jar`适用于Tomcat 6版本,而`comet4j-tomcat7.jar`适用于Tomcat ...

    配置tomcat支持comet

    【标题】:“配置Tomcat支持Comet” 在Web开发中,传统的HTTP协议是基于请求-响应模型的,服务器端等待客户端发起请求,然后响应。但有些应用,如实时聊天、股票更新、在线游戏等,需要服务器能够主动推送数据到...

    comet4j+tomcat6+tomcat7并附完整版Demo

    3. **配置文件**:如Tomcat的server.xml或web.xml,可能需要进行相应的配置以支持Comet4j的运行,例如设置连接超时时间、开启特定的 Comet4j 相关监听器等。 4. **部署说明**:如何将这些代码部署到Tomcat 6或7上,...

    comet4j-tomcat6.jar、comet4j-tomcat7.jar、comet4j.js

    在这个压缩包中,包含了针对Tomcat6和Tomcat7两个版本的Comet4J支持库以及对应的JavaScript库。 1. **Comet4J技术详解**: Comet技术是Web服务器与浏览器之间的一种持久连接方式,允许服务器在接收到新数据时主动...

    comet4j-tomcat6.jar和comet4j-tomcat7.jar和comet4j.js

    这两个JAR文件包含了Comet4j的核心组件,使得开发者能够在这些版本的Tomcat上部署和运行支持Comet的Web应用程序。它们提供了与Tomcat容器集成的接口和类,使得在处理HTTP请求和响应时能够支持长轮询、HTTP流或隐藏...

    Tomcat 开发Comet实例

    首先,我们需要了解Tomcat如何支持Comet。Tomcat 5.5以上版本内置了对Comet的支持,通过使用`AsyncContext`和` CometProcessor`接口。`AsyncContext`允许在Servlet处理程序中异步处理请求,而`CometProcessor`则为...

    comet4j-tomcat6-tomcat7-jar包以及js文件

    当Tomcat服务器加载这些库后,就可以支持Comet4j协议,提供持久连接服务,使得服务器可以主动向客户端推送数据,而无需客户端不断发起请求。 `Comet4j开发指南`通常是一份详细的技术文档,它为开发者提供了如何配置...

    Tomcat comet 服务器推技术

    2. **Tomcat 对 Comet 的支持**:Tomcat 自版本 5.5 起就开始支持 Comet,它提供了两种处理模型:`AsyncProcessor` 和 `PushBuilder`。前者基于 Servlet 2.5 的异步处理,后者是针对 Servlet 3.0 引入的,提供更简洁...

    comet4j所需js与jar包(tomcat6与tomcat7)

    1. 配置Tomcat:确保Tomcat已经正确配置以支持Comet请求。这通常涉及修改`server.xml`文件,设置`Connector`元素的`enableLookups`、`maxProcessors`和`keepAliveTimeout`属性。 2. 引入jar包:将`comet4j.jar`放入...

    comet4j-tomcat7.jar comet4j.js

    6. **性能优化**:由于Comet技术可能会增加服务器的负载,所以了解如何优化连接管理和资源使用至关重要,以确保在高并发场景下的稳定性和效率。 7. **安全性**:考虑安全问题,如防止跨站请求伪造(CSRF)和保护...

    comet套件(comet4j-tomcat6/7.jar、comet4j.js)

    1. `comet4j-tomcat6.jar` 和 `comet4j-tomcat7.jar`:这两个JAR文件是Comet4J为Tomcat 6和Tomcat 7优化的版本,它们提供了与Tomcat容器集成的能力,允许开发者在Tomcat环境下使用Comet4J实现服务器推送功能。...

    tomcat+comet实现终端与服务端同步的小例子

    **三、Tomcat支持Comet** Tomcat自版本5.5开始支持Comet,通过`org.apache.catalina.connector.CometProcessor`接口实现。开发者需要编写自定义处理器来处理长时间运行的HTTP请求,处理数据推送和断开连接。 **四、...

    comet4j+tomcat7 demo

    2. **操作手册**:详细解释了如何配置Tomcat7以支持Comet4j,如何部署应用,以及如何测试实时通信功能。这包括设置Tomcat的`server.xml`文件,启用Comet支持,以及理解Comet4j的配置选项。 学习这个Demo,你需要...

    comet4j-tomcat6.rar

    将这个JAR包添加到Tomcat的类路径中,可以使得Tomcat支持Comet4j的特性,实现服务器端的数据推送。 使用这些资源在Tomcat 6上部署Comet4j应用,开发者需要注意以下几点: 1. **配置Tomcat**:由于Comet4j依赖于...

    comet4j-tomcat6.jar|comet4j-tomcat7.jar下载_以及对Jfinal类以及Zcurd项目的支持

    Comet4j为针对java web项目的后台消息推送工具,支持后台主动往浏览器推送消息。附件rar包提供Comet4j基础资源包下载,适用于所有Comet4j项目,同时特别针对comet4j对Jfinal类以及Zcurd项目的支持做了一些注意事项...

    comet4j.js+comet4j-tomcat7jar包资源

    Tomcat 7是一个流行的开源Java应用服务器,支持Servlet和JSP标准,Comet4J利用其特性来实现 comet 技术。你需要将这个jar包添加到Tomcat的类路径(classpath)中,以便在服务器端运行Comet4J相关的代码。 2. `comet...

    comet4j包含tomcat6和tomcat7的jar包和js

    Comet4J是一个微型的即时推送框架,它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的...

    comet4j-tomcat6.jar.rer

    【描述】提到"comet4j-tomcat7.jar"是与"comet4j.js"一起使用的,这表明该技术不仅涉及到服务器端的处理,还涉及到客户端的JavaScript支持。Comet4j.js可能是与服务器端的comet4j服务进行通信的前端脚本库。通过这种...

Global site tag (gtag.js) - Google Analytics