需要的jar包以及基础的配置参考:
tomcat comet 推送 技术 入门
直接切入正题:
首先引入tomcat的lib目录下的jar包:
catalina.jar,servlet-api.jar
另外要修改tomcat的server.xml,将protocal="http/1.1"什么的修改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
这样就让tomcat支持推送功能了
首先是servlet(带有注释):
package nio.comet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; 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 ChatCometServlet extends HttpServlet implements CometProcessor{ private static final long serialVersionUID = 1L; private List<CometEvent> events = new ArrayList<CometEvent>(); @Override public void event(CometEvent event) throws IOException, ServletException { HttpServletRequest request = event.getHttpServletRequest(); String path = request.getRequestURI(); if(path.indexOf("setComet") != -1){ //发送消息的请求 String message = request.getParameter("message"); //遍历所有的CometEvent,将消息发送出去 synchronized(events){ //使用list的遍历器 Iterator<CometEvent> iterator = events.iterator(); CometEvent e = null; while(iterator.hasNext()){ e = iterator.next(); HttpServletResponse res = e.getHttpServletResponse(); //设置响应的编码和类型 res.setCharacterEncoding("utf-8"); res.setContentType("text/plain"); PrintWriter writer = res.getWriter(); writer.write(message); writer.flush(); //一定要调用list保存的CometEvent对象的close方法关闭,这样才可以及时将消息推送出去 e.close(); //删除的时候要使用iterator的删除方法,否则可能会引发cuncurrentModifyException iterator.remove(); } } //最后关闭当前请求的CometEvent event.close(); return; }else if(path.indexOf("getComet") != -1){ //获取消息的请求 if(event.getEventType() == CometEvent.EventType.BEGIN){ //begin阶段,设置超时时间,并将CometEvent对于保存到list中,其他阶段均返回ERROR(简单处理) event.setTimeout(20000); synchronized(events){ events.add(event); } return; }else if(event.getEventType() == CometEvent.EventType.END){ synchronized(events){ HttpServletResponse res = event.getHttpServletResponse(); res.setCharacterEncoding("utf-8"); res.setContentType("text/plain"); PrintWriter writer = res.getWriter(); writer.write("ERROR"); writer.flush(); event.close(); events.remove(event); } return; }else if(event.getEventType() == CometEvent.EventType.ERROR){ synchronized(events){ HttpServletResponse res = event.getHttpServletResponse(); res.setCharacterEncoding("utf-8"); res.setContentType("text/plain"); PrintWriter writer = res.getWriter(); writer.write("ERROR"); writer.flush(); event.close(); events.remove(event); } return; }else if(event.getEventType() == CometEvent.EventType.READ){ synchronized(events){ HttpServletResponse res = event.getHttpServletResponse(); res.setCharacterEncoding("utf-8"); res.setContentType("text/plain"); PrintWriter writer = res.getWriter(); writer.write("ERROR"); writer.flush(); event.close(); events.remove(event); } return; } } } }
然后再web.xml中配置servlet:
<servlet> <servlet-name>mycomet</servlet-name> <servlet-class>nio.comet.ChatCometServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mycomet</servlet-name> <url-pattern>/comet/*</url-pattern> </servlet-mapping>
然后就是页面了(里面需要引入jquery):
<%@ page language="java" import="java.util.*" pageEncoding="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 'chat.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"> <script type="text/javascript" src="upload/js/jquery.min.js"></script> <script type="text/javascript"> $(function(){ //页面加载完之后就发起读取消息的长连接 read(); }); //发送消息 function send(){ var f = document.forms['cometForm']; $.post("comet/setComet",$(f).serialize()); } //读取消息 function read(){ $.ajax({ type: "POST", url: "comet/getComet", success: function(data){ if("ERROR" != data){ $("#show").html($("#show").html()+'<br/>'+data); } read(); } }); } </script> </head> <body> <form name="cometForm"> <input type="text" name="message"/> <input type="button" value="send" onclick="send();"/> </form> 消息: <div id="show"></div> </body> </html>
然后就可以打开多个浏览器测试了。。。
相关推荐
在描述中提到的"Java comet服务器推送(聊天)实现代码",很可能包含了这些Comet技术的具体实现,包括服务器端的Servlet代码和可能的客户端JavaScript代码,用于处理推送的逻辑和展示消息。 SSM框架与Comet结合,可以...
javaweb消息推送 基于comet实现局域网内部通讯(聊天室)demo 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 消息缓存机制,确保长轮询工作模式下不丢失...
【标题】"comet4j 自己写的消息推送 觉得实用" 提示我们讨论的是一个自定义实现的基于 Comet4j 的消息推送系统。Comet4j 是一个开源的 Java 框架,用于实现实时的、双向的、基于 HTTP 长连接的消息推送服务,它解决...
本示例介绍的是如何使用Comet4j这个第三方库来实现后台到前台的消息推送功能。Comet4j是一个专门用于JavaWeb应用的长连接通讯框架,它简化了基于Comet技术的实时通信实现。 首先,我们要理解Comet技术。Comet是一种...
【标题】"comet4j 服务端向浏览器实时推送消息(支持指定用户推送)" 描述了一种技术方案,用于实现在服务器与浏览器之间进行实时通信,特别强调了能够针对性地向特定用户推送消息。这一功能在现代Web应用中非常重要,...
总结来说,DWR与Java结合的Web消息推送方案利用了Comet技术,提供了实时、双向的通信能力。通过在后端处理数据推送和前端与服务器的交互,可以构建出高性能、低延迟的实时Web应用。开发者在实际应用中,需根据项目...
本篇文章将详细探讨基于Comet推送技术实现的asp.net实时图形控件及其特点。 首先,我们需要理解Comet技术。Comet是一种Web通信模式,它打破了传统的HTTP请求-响应模型,允许服务器向客户端主动推送数据,而不是等待...
Java 使用 Comet4j 主动向客户端推送信息是一个常见的实时通信技术,主要应用于构建WebSocket或长轮询等实时交互的应用场景。Comet4j 是一个基于 HTTP 长连接的服务器端框架,它允许服务器端主动向客户端推送数据,...
DWR3的消息推送功能在实时应用,如聊天室、股票报价、在线游戏等场景中非常有用。它减少了延迟,提高了用户体验。然而,需要注意的是,由于Comet技术基于长连接,可能会对服务器负载和并发性产生影响,因此在设计和...
标题中的“消息推送comet4jjar包”指的是一个用于实现服务器向客户端实时推送消息的框架,主要针对的是IE8及以上的浏览器。Comet4j是这个框架的名称,它是一个基于Java技术构建的长连接通信框架,适用于需要双向通信...
【标题】: 使用DWR的Comet推送技术创建多人聊天室 【描述】: 本文主要探讨如何通过Spring与Direct Web Remoting (DWR)框架的整合,利用Comet技术来构建一个无需刷新页面的多人在线聊天室。Comet是一种实现服务器到...
最后,部署项目到Tomcat7服务器,启动服务器,通过浏览器访问项目,测试Comet推送功能是否正常工作。 在实际应用中,Comet技术的性能和效率会受到服务器负载、网络状况以及浏览器支持的影响。因此,在设计和实现...
在DWR3中,"推送消息"功能是其特性之一,它使得服务器能够主动向客户端推送数据,而不仅仅是响应客户端的请求。这种技术通常被称为Comet或长轮询,可以用于实现实时通信,如聊天应用、股票报价、在线游戏等场景。 ...
标题中的“用DWR comet+Spring实现服务器推送的例子--网页聊天室”涉及到的是Web开发中的实时通信技术。DWR(Direct Web Remoting)是一个开源Java库,它允许JavaScript在浏览器和服务器之间进行直接的、安全的远程...
本文将深入探讨“C#消息推送源码”这一主题,结合标签“dwr”,“comet”,“消息推送”,“反推送”以及“源码”,来解析相关的知识点。 首先,让我们了解一下消息推送的概念。消息推送是网络应用程序中一种技术,...
- **聊天室接口**:服务器端定义了一个或多个处理聊天消息的Java类,这些类提供了添加、获取和广播消息的方法。 - **JavaScript接口**:DWR自动生成了与服务器端接口对应的JavaScript API,前端可以直接调用这些API...
Comet4j是一种基于Java的实时通信框架,它主要用于实现服务器向客户端的高效、低延迟的数据推送技术。在Web开发中,传统的HTTP协议是请求-响应模式,即客户端发起请求,服务器响应,然后连接关闭。然而,对于需要...
在IT行业中,消息推送和屏幕右下角的弹窗功能是常见的用户交互设计,尤其在即时通讯软件如QQ中,这种设计使得用户可以及时获取新消息通知。本文将深入探讨如何实现这样的功能,并以"comet4j"作为示例进行讲解。 1. ...
标题"comet4j推送Demo"表明这是一个使用Comet4j库创建的示例项目,目的是展示如何在Tomcat7环境下实现服务器推送功能。Tomcat7是一个广泛使用的开源Servlet容器,它支持Servlet 3.0规范,这为Comet4j提供了运行环境...
Comet4j是一种基于Java的 comet 技术框架,它为开发者提供了一种高效、便捷的服务器向客户端实时推送数据的方式。Comet技术是Web应用中实现双向通信的一种策略,通常用于构建实时交互的Web应用,如聊天室、股票行情...