设为首页 收藏本站
查看: 226|回复: 0

[经验分享] tomcat comet 推送 技术 入门

[复制链接]

尚未签到

发表于 2017-1-22 10:19:44 | 显示全部楼层 |阅读模式
  参考资料:
  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里面。
  好了,晚上的收获就这些了,睡觉

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-331951-1-1.html 上篇帖子: Tomcat配置部署servlet 下篇帖子: maven tomcat:run指定tomcat7:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表