今天在测试中无意中看到Tomcat 6的新特性Comet,使用Comet技术可以轻松实现一个Pushlet的功能,让我看了着实兴奋不已,而其官方网站还给出了一个Messenger的例子。
public class ChatServlet
extends HttpServlet implements CometProcessor {
protected ArrayList<HttpServletResponse> connections =
new ArrayList<HttpServletResponse>();
protected MessageSender messageSender = null;
-
public void init() throws ServletException {
messageSender = new MessageSender();
new Thread(messageSender,
"MessageSender[" + getServletContext
().
getContextPath() +
"]");
messageSenderThread.setDaemon(true);
messageSenderThread.start();
}
public void destroy() {
connections.clear();
messageSender.stop();
messageSender = null;
}
/**
* Process the given Comet event.
*
* @param event The Comet event that will be processed
* @throws IOException
* @throws ServletException
*/
public void event(CometEvent event)
HttpServletRequest request = event.getHttpServletRequest();
HttpServletResponse response = event.getHttpServletResponse();
if (event.getEventType() == CometEvent.EventType.BEGIN) {
log("Begin for session: " + request.getSession(true).getId());
writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
writer.flush();
synchronized(connections) {
connections.add(response);
}
} else if (event.getEventType() == CometEvent.EventType.ERROR) {
log("Error for session: " + request.getSession(true).getId());
synchronized(connections) {
connections.remove(response);
}
event.close();
} else if (event.getEventType() == CometEvent.EventType.END) {
log("End for session: " + request.getSession(true).getId());
synchronized(connections) {
connections.remove(response);
}
writer.println("</body></html>");
event.close();
} else if (event.getEventType() == CometEvent.EventType.READ) {
byte[] buf = new byte[512];
do {
int n = is.read(buf); //can throw an IOException
if (n > 0) {
log
("Read " + n +
" bytes: " +
new String(buf,
0, n
) + " for session: " + request.getSession(true).getId());
} else if (n < 0) {
error(event, request, response);
return;
}
} while (is.available() > 0);
}
}
public class MessageSender
implements Runnable {
protected boolean running = true;
protected ArrayList<String> messages = new ArrayList<String>();
-
public MessageSender() {
}
-
public void stop() {
running = false;
}
/**
* Add message for sending.
*/
synchronized (messages) {
messages.add("[" + user + "]: " + message);
messages.notify();
}
}
public void run() {
while (running) {
if (messages.size() == 0) {
try {
synchronized (messages) {
messages.wait();
}
// Ignore
}
}
synchronized (connections) {
String[] pendingMessages =
null;
synchronized (messages) {
pendingMessages = messages.
toArray(new String[0]);
messages.clear();
}
// Send any pending message on all the open connections
for (int i = 0; i < connections.size(); i++) {
try {
for (int j = 0; j < pendingMessages.length; j++) {
writer.println(pendingMessages[j] + "<br>");
}
writer.flush();
log("IOExeption sending message", e);
}
}
}
}
}
}
}
分享到:
相关推荐
2. 配置Tomcat服务器,启用Comet支持。这可能需要修改Tomcat的server.xml文件,添加特定的监听器和处理程序。 3. 在Java后端,创建Comet4J处理类,该类负责处理客户端的连接并推送数据。 4. 使用`comet4j.js`在前端...
开发者需要将这些JAR文件添加到Tomcat的lib目录下,以便Tomcat在启动时自动加载,从而支持Comet4j的HTTP长连接特性。值得注意的是,`comet4j-tomcat6.jar`适用于Tomcat 6版本,而`comet4j-tomcat7.jar`适用于Tomcat ...
【标题】:“配置Tomcat支持Comet” 在Web开发中,传统的HTTP协议是基于请求-响应模型的,服务器端等待客户端发起请求,然后响应。但有些应用,如实时聊天、股票更新、在线游戏等,需要服务器能够主动推送数据到...
3. **配置文件**:如Tomcat的server.xml或web.xml,可能需要进行相应的配置以支持Comet4j的运行,例如设置连接超时时间、开启特定的 Comet4j 相关监听器等。 4. **部署说明**:如何将这些代码部署到Tomcat 6或7上,...
在这个压缩包中,包含了针对Tomcat6和Tomcat7两个版本的Comet4J支持库以及对应的JavaScript库。 1. **Comet4J技术详解**: Comet技术是Web服务器与浏览器之间的一种持久连接方式,允许服务器在接收到新数据时主动...
这两个JAR文件包含了Comet4j的核心组件,使得开发者能够在这些版本的Tomcat上部署和运行支持Comet的Web应用程序。它们提供了与Tomcat容器集成的接口和类,使得在处理HTTP请求和响应时能够支持长轮询、HTTP流或隐藏...
首先,我们需要了解Tomcat如何支持Comet。Tomcat 5.5以上版本内置了对Comet的支持,通过使用`AsyncContext`和` CometProcessor`接口。`AsyncContext`允许在Servlet处理程序中异步处理请求,而`CometProcessor`则为...
当Tomcat服务器加载这些库后,就可以支持Comet4j协议,提供持久连接服务,使得服务器可以主动向客户端推送数据,而无需客户端不断发起请求。 `Comet4j开发指南`通常是一份详细的技术文档,它为开发者提供了如何配置...
2. **Tomcat 对 Comet 的支持**:Tomcat 自版本 5.5 起就开始支持 Comet,它提供了两种处理模型:`AsyncProcessor` 和 `PushBuilder`。前者基于 Servlet 2.5 的异步处理,后者是针对 Servlet 3.0 引入的,提供更简洁...
1. 配置Tomcat:确保Tomcat已经正确配置以支持Comet请求。这通常涉及修改`server.xml`文件,设置`Connector`元素的`enableLookups`、`maxProcessors`和`keepAliveTimeout`属性。 2. 引入jar包:将`comet4j.jar`放入...
6. **性能优化**:由于Comet技术可能会增加服务器的负载,所以了解如何优化连接管理和资源使用至关重要,以确保在高并发场景下的稳定性和效率。 7. **安全性**:考虑安全问题,如防止跨站请求伪造(CSRF)和保护...
1. `comet4j-tomcat6.jar` 和 `comet4j-tomcat7.jar`:这两个JAR文件是Comet4J为Tomcat 6和Tomcat 7优化的版本,它们提供了与Tomcat容器集成的能力,允许开发者在Tomcat环境下使用Comet4J实现服务器推送功能。...
**三、Tomcat支持Comet** Tomcat自版本5.5开始支持Comet,通过`org.apache.catalina.connector.CometProcessor`接口实现。开发者需要编写自定义处理器来处理长时间运行的HTTP请求,处理数据推送和断开连接。 **四、...
2. **操作手册**:详细解释了如何配置Tomcat7以支持Comet4j,如何部署应用,以及如何测试实时通信功能。这包括设置Tomcat的`server.xml`文件,启用Comet支持,以及理解Comet4j的配置选项。 学习这个Demo,你需要...
将这个JAR包添加到Tomcat的类路径中,可以使得Tomcat支持Comet4j的特性,实现服务器端的数据推送。 使用这些资源在Tomcat 6上部署Comet4j应用,开发者需要注意以下几点: 1. **配置Tomcat**:由于Comet4j依赖于...
Comet4j为针对java web项目的后台消息推送工具,支持后台主动往浏览器推送消息。附件rar包提供Comet4j基础资源包下载,适用于所有Comet4j项目,同时特别针对comet4j对Jfinal类以及Zcurd项目的支持做了一些注意事项...
Tomcat 7是一个流行的开源Java应用服务器,支持Servlet和JSP标准,Comet4J利用其特性来实现 comet 技术。你需要将这个jar包添加到Tomcat的类路径(classpath)中,以便在服务器端运行Comet4J相关的代码。 2. `comet...
Comet4J是一个微型的即时推送框架,它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的...
【描述】提到"comet4j-tomcat7.jar"是与"comet4j.js"一起使用的,这表明该技术不仅涉及到服务器端的处理,还涉及到客户端的JavaScript支持。Comet4j.js可能是与服务器端的comet4j服务进行通信的前端脚本库。通过这种...