`
hzywy
  • 浏览: 169021 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

comet4j轮询

阅读更多

 

 

参考地址 :http://code.google.com/p/comet4j/wiki/HelloWorld#%E5%AE%A2%E6%88%B7%E7%AB%AF 这是配置TOMCAT的

     今天终于用comet4J实习了轮询,在过程中,明白了许多。一定要细心。我也终于可以完成这篇博客了。

首先是必须要的jar包和js文件,这些东西我会上传。

 helloworld.jsp:

<%@ page contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'helloworld.jsp' starting page</title>
   
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<script type="text/javascript" src="<%=basePath%>js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="<%=basePath%>js/comet4j.js"></script>
<script type="text/javascript" src="<%=basePath%>js/jquery-1.2.6.pack.js"></script>
<script type="text/javascript" src="<%=basePath%>js/jquery.messager.js"></script>
 <script type="text/javascript">
 
$(function(){
    JS.Engine.on('hello',function(text){ 
    //alert(text);//
其中text就是从后台传过来的数据
    $.messager.show('<font color=red>自定义标题</font>', text+'<font color=green style="font-size:14px;font-weight:bold;">自定义内容</font>');
    });
 JS.Engine.start('conn');
});
  
 
 
</script>
  </head>
 
  <body >      
      
  </body>
 
</html>

 

HelloWorld.java

package org.comet4j.demo.helloworld;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.comet4j.core.CometContext;

public class HelloWorld
implements ServletContextListener {
    private static final String CHANNEL = "hello";
    public void contextInitialized(ServletContextEvent arg0) {
        CometContext cc = CometContext.getInstance();
        cc.registChannel(CHANNEL);// 注册应用的channel
        Thread helloAppModule = new Thread(new HelloAppModule(),"helloworld");
        helloAppModule.setDaemon(true);
        helloAppModule.start();
    }

 

    public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
   
}
     
}

一定要继承 ServletContextListener,这个我弄了一上午,最后才发现时没继承。

HelloAppModule.java

package org.comet4j.demo.helloworld;

import org.comet4j.core.CometContext;
import org.comet4j.core.CometEngine;

public class HelloAppModule implements Runnable{
    private static final String CHANNEL = "hello";

    public void run() {
        while (true) {
            CometEngine engine = CometContext.getInstance().getEngine();
            engine.sendToAll(CHANNEL , "我来了!");
//传输数据
        }
    }

}
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <listener>
        <description>Comet4J容器侦听</description>
        <listener-class>org.comet4j.core.CometAppListener</listener-class>
    </listener>
    <servlet>
        <description>Comet连接[默认:org.comet4j.core.CometServlet]</description>
        <display-name>CometServlet</display-name>
        <servlet-name>CometServlet</servlet-name>
        <servlet-class>org.comet4j.core.CometServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CometServlet</servlet-name>
        <url-pattern>/conn</url-pattern>
    </servlet-mapping>
 
    <listener>
        <description>HelloWorld</description>
        <listener-class>org.comet4j.demo.helloworld.HelloWorld</listener-class>
    </listener>
</web-app>

分享到:
评论
13 楼 fenglingabc 2014-01-23  
我用了comet4j 结果因为推送比较频繁(基本上1秒一次),几个小时后,就报了内存溢出的错误
2014-1-18 21:12:11 org.apache.coyote.http11.Http11NioProcessor process
严重: Error processing request
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuffer.append(StringBuffer.java:224)
at java.io.StringWriter.write(StringWriter.java:95)
at java.io.PrintWriter.write(PrintWriter.java:412)
at java.io.PrintWriter.write(PrintWriter.java:429)
at java.io.PrintWriter.print(PrintWriter.java:559)
at java.io.PrintWriter.println(PrintWriter.java:695)
at java.lang.Throwable.printStackTrace(Throwable.java:512)
at java.util.logging.SimpleFormatter.format(SimpleFormatter.java:72)
at org.apache.juli.FileHandler.publish(FileHandler.java:158)
at java.util.logging.Logger.log(Logger.java:458)
at java.util.logging.Logger.doLog(Logger.java:480)
at java.util.logging.Logger.logp(Logger.java:680)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:167)
at org.apache.juli.logging.DirectJDKLog.error(DirectJDKLog.java:135)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:329)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:889)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:720)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2262)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
2014-1-18 21:12:24 org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler process
严重: Error reading request, ignored
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuffer.append(StringBuffer.java:224)
at java.util.logging.SimpleFormatter.format(SimpleFormatter.java:74)
at org.apache.juli.FileHandler.publish(FileHandler.java:158)
at java.util.logging.Logger.log(Logger.java:458)
at java.util.logging.Logger.doLog(Logger.java:480)
at java.util.logging.Logger.logp(Logger.java:680)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:167)
at org.apache.juli.logging.DirectJDKLog.error(DirectJDKLog.java:135)
at org.apache.coyote.http11.Http11NioProcessor.endRequest(Http11NioProcessor.java:998)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:929)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:720)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2262)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
2014-1-18 21:12:29 org.apache.tomcat.util.net.NioEndpoint setSocketOptions
严重:
java.lang.OutOfMemoryError: Java heap space
2014-1-18 21:12:31 org.apache.tomcat.util.net.NioEndpoint setSocketOptions
严重:
java.lang.OutOfMemoryError: Java heap space
2014-1-18 21:12:33 org.apache.tomcat.util.net.NioEndpoint setSocketOptions
严重:
java.lang.OutOfMemoryError: Java heap space
2014-1-18 21:12:34 org.apache.tomcat.util.net.NioEndpoint setSocketOptions
严重:

然后我就尝试:while (true) {
            CometEngine engine = CometContext.getInstance().getEngine();
            engine.sendToAll(CHANNEL , "我来了!"); //传输数据
        }

改为:
CometEngine engine = null;
while (true) {
if(engine == null){
engine = CometContext.getInstance().getEngine();

}
           engine.sendToAll(CHANNEL , "我来了!"); //传输数据
}

结果又报错:
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run
严重:
java.lang.NullPointerException
at org.apache.coyote.http11.InternalNioOutputBuffer.recycle(InternalNioOutputBuffer.java:351)
at org.apache.coyote.http11.Http11NioProcessor.recycle(Http11NioProcessor.java:1007)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.release(Http11NioProtocol.java:643)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.event(Http11NioProtocol.java:679)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2262)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
2014-1-22 15:19:57 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run
12 楼 ralfsqual 2013-04-23  
自定义的线程中的逻辑每次都是被执行两次,不知道为什么啊。比如打印一句话,会发现一次while打印两次。
11 楼 goll2012 2013-04-09  
我倒,原来要配置tomcat。。。
果然是高手,对于只看不动手的人很好
10 楼 goll2012 2013-04-09  
严重: Allocate exception for servlet CometServlet
java.lang.ClassNotFoundException: org.apache.catalina.comet.CometProcessor

环境:tomcat6+jdk6+myeclipse10下
这是怎么回事?
9 楼 notebook_w 2013-02-28  
这个只能基于tomcat实现吗?要知道实际客户环境下各种服务器都有,有解决方案吗?
8 楼 苏格兰情调 2013-01-28  
给提供一个点对点的 sendto的例子 最好好对应IP 360104491@qq.com 谢谢
7 楼 hzywy 2013-01-08  
你按照我博客上的网址做就可以了,可以实现点对点的
6 楼 chenguibin10 2013-01-08  
求 comet4j 的api ,772579739@qq.com想做点对点的信息发送。找不到demo 也找不到api。
5 楼 hzywy 2012-11-01  
a8726426 写道
你好,我按照这个配置后,最后按照http://localhost:8080/comet/conn这样的URL来进行访问的时候,浏览器提示说The specified HTTP method is not allowed for the requested resource (HTTP method GET is not supported by this URL),不知道问题出在哪里,请问你完成上述位置后,用什么样的url来访问啊


这个要在tomcat里面配置 你按上面的网址,配置一下tomcat就可以了
4 楼 peng_joy 2012-10-27  
a8726426 写道
你好,我按照这个配置后,最后按照http://localhost:8080/comet/conn这样的URL来进行访问的时候,浏览器提示说The specified HTTP method is not allowed for the requested resource (HTTP method GET is not supported by this URL),不知道问题出在哪里,请问你完成上述位置后,用什么样的url来访问啊

tomcat需要修改配置文件
3 楼 a8726426 2012-10-23  
你好,我按照这个配置后,最后按照http://localhost:8080/comet/conn这样的URL来进行访问的时候,浏览器提示说The specified HTTP method is not allowed for the requested resource (HTTP method GET is not supported by this URL),不知道问题出在哪里,请问你完成上述位置后,用什么样的url来访问啊
2 楼 hzywy 2012-08-21  
可以啊 当然可以喝struts2 一起用啊!!这个没冲突的
1 楼 xuezhimeng 2012-08-18  
comet4j不能跟struts2一起用么?

相关推荐

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

    在实际应用中,使用Comet4j可以显著提升用户体验,因为它避免了传统的AJAX轮询带来的频繁请求和高延迟问题。同时,Comet4j也支持大规模并发,可以处理成千上万的并发连接,这对于构建高并发、实时性的互联网应用非常...

    comet4j实例

    Comet4j通过长轮询、HTTP流或WebSocket等方式克服了HTTP协议的限制,实现了低延迟的数据传输。 在这个"comet4j实例"中,我们将会探讨如何使用Comet4j来创建一个可运行的示例应用。这个压缩包`comet4jDemo`可能包含...

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

    这个JavaScript文件提供了API,使得前端开发者能够轻松地与Comet4J服务器端接口进行通信,实现长轮询、HTTP流或隐藏IFrame等Comet技术。这些技术可以帮助建立持久的连接,使得服务器可以及时地向浏览器推送更新的...

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

    标题中的"comet4j-tomcat6.jar"和"comet4j-tomcat7.jar"是针对Tomcat 6和7版本的特定兼容库。这两个JAR文件包含了Comet4j的核心组件,使得开发者能够在这些版本的Tomcat上部署和运行支持Comet的Web应用程序。它们...

    comet4j-tomcat7.jar comet4j.js

    Comet4J是一个针对Java平台的服务器推送框架,它的核心理念是利用Ajax(XMLHttpRequest)技术来实现服务器向客户端的实时数据推送。在传统的HTTP协议中,服务器与客户端的通信通常依赖于客户端发起请求,而服务器...

    comet4j完整包

    2. **WebSocket**:虽然comet4j主要关注的是长轮询,但随着WebSocket协议的普及,一些现代的Comet实现可能会结合WebSocket以提供更好的性能和更低的延迟。 3. **事件驱动编程**:在服务端和客户端都需要进行事件驱动...

    comet4j完整资源

    1. **长轮询(Long Polling)**:Comet4j可能实现了长轮询技术,这是最早的Comet实现方式之一。当客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新的数据可发送,或者超时才返回,从而实现数据...

    comet4j需要的jar与js

    Comet4j是一个Java实现的长轮询技术框架,它主要用来解决Web应用中的实时通信问题。在传统的HTTP协议中,服务器向客户端推送数据时,需要客户端不断发起请求,服务器才能响应,这种方式效率低且浪费资源。而Comet4j...

    comet4j.js,comet4j-tomcat6.jar,comet4j-tomcat7.jar

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式 文件包含comet4j-tomcat6.jar , comet4j-tomcat7.jar , comet4j.js...

    基于comet4j的简易聊天

    在描述中,我们看到"基于Comet4j的简易聊天",这表明项目的核心是利用Comet4j的长轮询或HTTP流特性来实现实时通信。Comet4j通过保持一个持久的HTTP连接开放,使得服务器可以在有新消息时立即推送到客户端,而不是...

    comet4j+tomcat7 demo

    Comet4j是一个开源的Java库,专门设计用于实现Comet技术,即长轮询(Long Polling)和HTTP流,以实现在Web应用中提供实时通信的能力。这个Demo包含了源代码和操作手册,帮助开发者快速理解和应用Comet4j。 在Web...

    comet4j的jar包、js、实例

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器推送技术,允许服务器向客户端实时推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术常用于实现聊天室、股票更新、在线游戏等实时交互功能...

    comet4j整套开发包最新版

    Comet4j是一种基于Java的服务器推送技术,它允许服务器主动向客户端发送数据,而无需客户端不断轮询请求。在Web应用中,这种技术能够显著提高实时性,尤其是在实时聊天、股票更新、在线游戏等场景中表现优异。该...

    服务器推送技术之comet4j资源包

    本资源包包含了实现Comet4j功能所需的关键组件,包括`comet4j.js`脚本文件和`comet4j-tomcat7.jar`服务器端库。 首先,让我们详细了解一下Comet4j。Comet技术是一种HTTP持久连接技术,它通过长时间保持HTTP连接来...

    comet4j+tomcat6+tomcat7并附完整版Demo

    Comet4j提供了异步处理、长轮询、HTTP流等多种策略,以适应不同的实时推送需求。通过使用Comet4j,开发人员可以轻松地创建出能够实时更新数据的Web应用,例如在线聊天、股票报价或者游戏等需要即时反馈的场景。 ...

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

    Comet4J是一个针对Java平台的服务器推送框架,专门用于实现AJAX(XMLHttpRequest)技术的长轮询和 comet 模式。这个框架的核心目的是在Web应用中实现实时通信,使得服务器能够主动向客户端推送数据,而无需客户端...

    comet4j服务器推可运行DEMO

    Comet4j采用了长轮询(Long Polling)、流(Streaming)和HTTP连接保持(HTTP Connection Keep-Alive)等多种策略,以适应不同的服务器和浏览器环境,保证数据的实时传输。长轮询是在客户端发送请求后,服务器并不...

    comet4j简单工程demo

    Comet4j是一个基于Java开发的实时通信框架,主要用于实现服务器向客户端的长连接推送服务。在Web应用中,传统的HTTP协议是请求-响应模式,不利于实现即时消息推送。而Comet4j通过 comet 技术,使得服务器能够主动向...

    comet4j.jar

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送数据的Web应用程序设计模式。Comet技术打破了传统的HTTP请求-响应模型,允许服务器在客户端保持持久连接,从而实现实时数据更新。这在需要...

Global site tag (gtag.js) - Google Analytics