`
hzywy
  • 浏览: 165793 次
  • 性别: 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(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式 文件包含comet4j-tomcat6.jar , comet4j-tomcat7.jar , comet4j.js...

    comet4j完整包

    comet4j完整包、comet4j.js、comet4j-tomcat6.jar、comet4j-tomcat7.jar

    comet4j nginx下问题的解决方案

    解决comet4j在tomcat7一下问题,和在nginx环境下问题。

    comet4j一整套官方出品前后端jar包,js,Demo包

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、...

    comet4j-demo

    Comet4J Comet for Java 是一个纯粹基于AJAX XMLHTTPRequest 的服务器推送框架 消息以JSON方式传递 具备长轮询 长连接 自动选择三种工作模式

    comet4jDemo

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

    comet4j:自动从code.google.compcomet4j导出

    comet4jAutomatically exported from code.google.com/p/comet4j功能特性推送消息广播。推送定向消息。提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。消息缓存机制,确保长轮询工作模式下不丢失...

    服务推送框架 come4js

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线...

    pushlet简单demo,导入即可运行

    pushlet简单demo,导入即可运行 Java 推送 长连接 轮询 pushlet comet4j

    come4j-tomcat.jar ojdbc7-12.1.0.2.jar.rar

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。ojdbc7-12.1.0.2是 适用于jdk7,Oracle版本12的包。

Global site tag (gtag.js) - Google Analytics