参考资料:
http://tomcat.apache.org/tomcat-6.0-doc/aio.html
首先引入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支持推送功能了
(注意:最后关闭连接的时候,要用CometEvent的close()方法)
然后写servlet,实现comet特定接口,实现event方法:
下面的例子作用是当一个请求没有携带name参数的时候,将该请求的HttpServletResponse存放到list中,等待后面某个请求携带了name参数的时候,通过推送的方式通知所有人该消息,当然,如果时间超时,则返回error,页面再次发生请求即可。个人感觉不错的入门例子
public class MyCometServlet extends HttpServlet implements CometProcessor { List<HttpServletResponse> responses = new ArrayList<HttpServletResponse>(); public void event(CometEvent event) throws IOException, ServletException { HttpServletRequest request = event.getHttpServletRequest(); HttpServletResponse response = event.getHttpServletResponse(); //请求开始 if (event.getEventType() == CometEvent.EventType.BEGIN) { //设置超时时间,单位ms event.setTimeout(3000); responses.add(response); // 昵称 String name = request.getParameter("name"); System.out.println(name); if (name == null) { return; } Writer writer = null; for(HttpServletResponse r:responses){ r.setCharacterEncoding("utf-8"); writer = r.getWriter(); writer.write("欢迎:"+name); System.out.println("-----"); writer.flush(); event.close(); } } else if (event.getEventType() == CometEvent.EventType.ERROR) { //请求超时 response.setCharacterEncoding("utf-8"); response.getWriter().write("error"); response.getWriter().flush(); response.getWriter().close(); event.close(); } else if (event.getEventType() == CometEvent.EventType.END) { //请求结束 response.setCharacterEncoding("utf-8"); response.getWriter().write("end"); response.getWriter().flush(); response.getWriter().close(); event.close(); } else if (event.getEventType() == CometEvent.EventType.READ) { //读取请求数据 response.setCharacterEncoding("utf-8"); response.getWriter().write("read"); response.getWriter().flush(); response.getWriter().close(); event.close(); } } }
当然该servlet要在web.xml中配置,我的映射路径为:/cometServlet
其中页面可以通过js发送请求,也可以通过直接在地址栏输入url,都可以
例如jquery异步请求:
$.post("cometServlet",function(data){ alert(data); });
可以携带参数:
var param={"name":"dreamoftch"}; $.post("cometServlet",param,function(data){ alert(data); });
或者直接地址栏输入:
http://localhost:8080/comet_helloWorld/cometServlet?name=dreamoftch
(携带参数的话,直接就有相应,没有参数则会等待)
比较明显的例子是多个页面发多个请求,前面的几个请求不携带name参数,最后一个携带name参数,就会使前面的所有的请求都接收到响应,当然超时的话会进到error里面。
好了,晚上的收获就这些了,睡觉
相关推荐
在Web应用中,尤其是在需要实时更新信息的场景下(如聊天室、股票行情、在线游戏等),Comet技术能显著提高用户体验,因为它可以即时地将服务器的更新推送给客户端,而无需客户端频繁请求。 Pushlet是Comet框架的一...
Pushlet框架应运而生,它基于Comet技术,利用持久连接来实现实时推送,使服务器能够在数据准备好时立即推送给客户端,而无需等待客户端的请求。 Pushlet框架的核心组件是pushlet.jar,这是一个包含所有必需类和库的...
通过 BlazeDS,你可以方便地调用 Java 对象的方法,并且它还提供了远程调用(Remoting)功能以及Web消息传递(Web Messaging)功能,支持Comet样式的消息推送,使得服务器能够主动向客户端发送数据。 在Windows环境...
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip
动态星空背景个人主页(带后台).zip