`
zkeshun
  • 浏览: 3599 次
社区版块
存档分类
最新评论

Tomcat comet 服务器推技术

    博客分类:
  • web
阅读更多

Tomcat已经实现了自己的comet方式,并且提供了一个例子。这样网上的例子很多,我精简了些。

MessageSender.java

package me.comet;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;

import javax.servlet.ServletResponse;

public class MessageSender extends Thread {

	private ServletResponse connection;

	public MessageSender(ServletResponse connection) {
		this.connection = connection;
	}
	
	public void run() {
		try {
			while (true) {
				if (connection == null) {
					synchronized (this) {
						wait();
					}
				}

				OutputStream out = connection.getOutputStream();
				out.write(getString().getBytes());
				out.flush();
				connection.flushBuffer();
				
				System.out.print(getString());
				
				Thread.sleep(1000);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	@SuppressWarnings("deprecation")
	private String getString() {
		return Thread.currentThread()+" CurrentTime "+new Date().toLocaleString() + "\n";
	}
	
}

 

TimeServlet.java

package me.comet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.CometEvent;
import org.apache.catalina.CometProcessor;

public class TimeServlet extends HttpServlet implements CometProcessor {
	private static final long serialVersionUID = 1L;
	private static final Integer TIMEOUT = 10 * 1000;
	
	private MessageSender sender = null;

	public void event(CometEvent event) throws IOException, ServletException {
		
		HttpServletRequest request = event.getHttpServletRequest();
		HttpServletResponse response = event.getHttpServletResponse();
		
		if (event.getEventType() == CometEvent.EventType.BEGIN) {
			log("Begin for session: " + request.getSession(true).getId());
			request.setAttribute("org.apache.tomcat.comet.timeout", TIMEOUT);
			
			sender = new MessageSender(response);
			sender.start();
			
		} else if (event.getEventType() == CometEvent.EventType.ERROR) {
			log("Error for session: " + request.getSession(true).getId());
			event.close();
		} else if (event.getEventType() == CometEvent.EventType.END) {
			log("End for session: " + request.getSession(true).getId());
			event.close();
		} else if (event.getEventType() == CometEvent.EventType.READ) {
			throw new UnsupportedOperationException("This servlet does not accept data");
		}
	}
	
	@Override
	public void destroy() {
		sender.interrupt();
		sender = null;
	}
}

 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>

	<servlet>
		<servlet-name>TimeServlet</servlet-name>
		<servlet-class>me.comet.TimeServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>TimeServlet</servlet-name>
		<url-pattern>/time</url-pattern>
	</servlet-mapping>

</web-app>

 

test.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Comet Weather</title>
	</head>
	
	<body>
		<label>记录</label>
		<br/>
		<iframe src="http://localhost:8080/comet/time"
			width="60%" height="300" frameborder="1"></iframe>
	</body>
</html>

 

更改 tomcat/conf/server.xml

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"  connectionTimeout="20000" redirectPort="8443" />

 

更改 tomcat/conf/context.xml

<Context>
	<Loader delegate="true" />
    	<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

 

jar包

添加tomcat/lib/catalina.jar

 

测试地址:http://localhost:8080/comet/test.jsp

3
1
分享到:
评论
2 楼 wuliaola 2012-03-16  
CometProcessor 接口在哪
1 楼 sunliyings17 2012-02-29  
不错不错

相关推荐

    comet4j-tomcat7后台信息推送jar包

    tomcat7后台服务器,java项目实现后台推送信息到客户端浏览器

    comet demo 向客户端推送例子

    通过tomcat服务器,向网页发送即时消息。comet的小例子,可以直接运行,用tomcat6.0。

    Comet4J服务器端推送技术

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

    Tomcat9.0服务器

    使用Tomcat服务器进行开发简单又方便,部署容易,配置简单!

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

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

    comet4j-tomcat7.jar和comen4j.js

    服务器主动向客户端推送消息所需的comet4j-tomcat7.jar和comen4j.js,在此需注意:comet4j-tomcat7.jar目前仅支持tomcat6和tomcat7

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

    此资源包中包含了tomcat7所需要的jar包与comet4j.js请各位自取,谢谢!

    web推送 comet技术

    demo是采用comet的web推送技术,使用tomcat7做服务器,内含tomcat7上面配置说明,在MyEclipse、tomcat7上面完美运行,本人亲测!

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

    comet4j消息推送所需js与jar包(tomcat6与tomcat7) Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架

    comet4j-tomcat7.jar comet4j.js

    comet4j-tomcat7.jar comet4j.js Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架

    comet4j包含tomcat6和tomcat7的jar包和js

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

    详解Tomcat如何实现Comet

    Comet模式是一种服务器端推技术,它的核心思想提供一种能让当服务器端往客户端发送数据的方式。Comet模式为什么会出现?刚开始人们在客户端通过不断自动刷新整个页面来更新数据,后来觉得体验不好又使用了AJAX不断从...

    基于tomact,comet4j,java服务器端推送消息到web页面

    这个项目是基于tomcat,comet4j的技术来实现推送消息到web页面,可以直接导入,直接运行的,里面包含了项目所需要的comet4j-tomcat7.jar(tomcat7的就导入这个),comet4j.js(页面引入这个js),等jar包,对于想要学习...

    comet4j整套开发包最新版

    该压缩包包含了目前最新的服务器推送技术comet4j技术的相关jar包及js脚本文件,服务器有tomcat6和tomcat7.

    comet4j-maven项目可以直接使用

    服务器推送技术comet4j技术的相关jar包及js脚本文件,maven项目里包含tomcat7的comet4j.jar包,项目直接解压部署运行可以看效果。做了两个不同频道的实时数据推送,希望对大家学习有帮助。

    http长轮询技术comet的实现

    通过comet实现了一个聊天功能。 1.需要在tomcat的server.xml里面配置 connectionTimeout="20000" redirectPort="8443" /&gt; 2.需要在tomcat的context.xml里面配置 在Context标签里面配置: ...

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

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

Global site tag (gtag.js) - Google Analytics