- 浏览: 571226 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (253)
- java (84)
- python (22)
- 设计模式 (12)
- 数据结构和算法 (7)
- ibatis (1)
- 数据挖掘 (2)
- 集体智慧读书笔记 (1)
- ubuntu (4)
- lucene (11)
- 算法 第4版 (11)
- apache mina (16)
- memcached (1)
- android (9)
- netty (6)
- mongodb (2)
- maven (2)
- openfire (2)
- 服务端 (21)
- 产品 (0)
- apache (1)
- 选择 (2)
- 构架WEB高性能站点 (7)
- redis (8)
- 诗词歌赋 (3)
- 源代码阅读 (5)
- 前端 (1)
- javascript (3)
- guice (1)
- 分布式 (5)
- 总结-2014 (4)
- jvm (1)
最新评论
-
liu_jiaqiang:
写的挺好
maven多项目管理 -
H972900846:
我想知道哪里整的,如果是自己写的,那有点牛呀如果是抄的请说明出 ...
SSL身份认证原理 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
定向网站爬虫---初级例子 -
fenglingabc:
经过测试,parameterType="java.u ...
mybatis获取主键和存储过程返回值 -
jyghqpkl:
[u][/u] ...
Cookie的secure 属性
1:聊天窗口的 处理servlet.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String eventName = request.getParameter("eventName"); System.out.println("keeper is here -----"+eventName); NameRegister reg = NameRegister.getInstance(); Event event = reg.getEvent(eventName); if(event == null){ event = new Event(eventName, this); reg.setEvent(eventName, event); } //阻塞 synchronized(this) { while(!event.isProcess()){ try { System.out.println("--keeper--阻塞中-----"); wait(); } catch(InterruptedException e) { e.printStackTrace(); } } } System.out.println("--keeper--已经释放-----"); EventListener listener = event.getListener(); if(listener!= null){ listener.process(request, response); } //删除事件 reg.removeEvent(eventName); }
从代码流程可以看出......有事件Evlent其实就是封装了 HttpServlet, 等:
public class Event { private String eventName; private HttpServlet servlet; private EventListener listener; private boolean isProcess; public Event(String eventName, HttpServlet servlet) { this.eventName = eventName; this.servlet = servlet; this.isProcess = false; this.listener = null; }
其中isProcess是作为释放servlet的线程的标志。
到发送请求 send到来的时候会进入SendServlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("chat is here"); String jid = request.getParameter("jid"); String tojid = request.getParameter("tojid"); String content = request.getParameter("content"); Message message = new Message(); message.setContent(content); message.setUserId(jid); message.setToUserId(tojid); Controller.action(new SendPrivateMsg(message.toString()), "msg"); System.out.println("msg---is --over"); }
封装message然后,Controlller中处理 信息,其中SendPrivateMsg是一个 实现了EventListener的 类:
public interface EventListener { public void process(HttpServletRequest request, HttpServletResponse response); }
看Controller:
public class Controller { public static boolean action(EventListener listener, String eventName){ NameRegister reg = NameRegister.getInstance(); HttpServlet servlet = null; Event e = null; try { e = reg.getEvent(eventName); if (e == null) { System.out.println("事件名称 null=="); return false; } e.setListener(listener); servlet = e.getServlet(); e.setProcess(true); synchronized (servlet) { System.out.println("事件名称=="+e.getEventName()); servlet.notifyAll(); } } catch (Exception ex) { ex.printStackTrace(); if ((servlet != null) && (e != null)) { e = null; return true; } } return false; } }
主要是对 特定的事件 释放 阻塞,然后可以继续执行
EventListener listener = event.getListener(); if(listener!= null){ listener.process(request, response); }
发表评论
-
protobuf-dt插件
2015-03-24 13:16 1367protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 560今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 667闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 15261: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9397Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5321: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 489转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 730简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 656一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7131: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13341: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 711今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 7971:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 553http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 401Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1097多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11441:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 38761:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 6941: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
Servlet3.0 异步处理 页面推送 Comet 实例
Comet服务器推送技术
java comet服务器推送使用步骤及例子
实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。
通过tomcat服务器,向网页发送即时消息。comet的小例子,可以直接运行,用tomcat6.0。
Comet-服务器推送解决方案.docx
Comet 有时也称反向 Ajax 或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会...
Java comet服务器推送(聊天)实现代码。
它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的能力,而你仅需要在服务器端调用Comet4...
javaweb消息推送 基于comet实现局域网内部通讯(聊天室)demo 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 消息缓存机制,确保长轮询工作模式下不丢失...
PHP防Sina微薄无刷新服务器推送(comet)原理,防微薄无刷新
comet4j 自己写的消息推送 觉得实用
实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。
这是一个利用comet4j第三方插件,实现javaweb项目中后台消息向前台推送的一个功能,前台只要利用jquery,后台是用java实现,tomcat用7的版本
这个项目是基于tomcat,comet4j的技术来实现推送消息到web页面,可以直接导入,直接运行的,里面包含了项目所需要的comet4j-tomcat7.jar(tomcat7的就导入这个),comet4j.js(页面引入这个js),等jar包,对于想要学习...
(2)基于Ajax推送Ajax主要是基于浏览器发送异步请求,提高用户操作的响应性 (1)基于 AJAX 的长轮询方式长轮询:HTTP的连接保持,服务器端会阻塞请
java实现Comet4j推送,代码完整,导入即可使用,简单方便
NULL 博文链接:https://frank59.iteye.com/blog/1455050
NULL 博文链接:https://zkeshun.iteye.com/blog/1391922
demo是采用comet的web推送技术,使用tomcat7做服务器,内含tomcat7上面配置说明,在MyEclipse、tomcat7上面完美运行,本人亲测!