- 浏览: 582322 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1433protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 622今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 720闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 16291: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9461Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5881: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 535转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 780简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 705一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7681: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13781: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 755今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8521:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 594http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 444Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1130多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11871:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 39371:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 7501: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
response.getWriter().write("服务器推送的数据"); } }); } ``` 在异步线程中,我们可以等待数据准备就绪,然后调用`asyncContext.complete()`来结束异步操作,并将结果写入响应。这种方式下,客户端的HTTP连接...
- 客户端JavaScript代码:负责建立和维持Comet连接,并处理服务器推送过来的数据。 - 服务器端Java代码:创建Servlet或Filter来处理HTTP请求,当有新消息时,通过挂起的HTTP连接向客户端发送。 为了运行这个示例,...
本文将详细介绍如何使用Comet4J框架来实现Java Comet服务器推送。 #### 二、Comet4J简介 Comet4J是一个基于Java的轻量级Comet框架,它能够帮助开发者轻松地实现实时数据推送功能。Comet4J支持多种服务器环境,并且...
session.sendMessage("这是服务器推送的消息"); ``` 以上就是使用Comet4j在JavaWeb项目中实现后台消息推送的基本流程。在实际应用中,可能还需要考虑连接管理、错误处理、性能优化等问题。通过这个例子,你可以了解...
综上所述,Tomcat 的 Comet 技术是通过 HTTP 长连接实现服务器推送,适合实时性要求高的应用。博客中可能会深入讲解原理、实现方式、性能优化和实际应用案例,对于理解和应用该技术非常有帮助。由于没有具体的内容,...
Comet4j就是一种基于Java实现的服务器推送技术框架,旨在简化实时Web应用的开发过程。本资源包包含了实现Comet4j功能所需的关键组件,包括`comet4j.js`脚本文件和`comet4j-tomcat7.jar`服务器端库。 首先,让我们...
在描述中提到的"Java comet服务器推送(聊天)实现代码",很可能包含了这些Comet技术的具体实现,包括服务器端的Servlet代码和可能的客户端JavaScript代码,用于处理推送的逻辑和展示消息。 SSM框架与Comet结合,可以...
本文将详细探讨如何通过JAVA实现多种服务器推送客户端的方式,包括Ajax轮询、长连接、长轮询以及Iframe刷新。 1. **Ajax轮询** Ajax轮询是最基础的实现方式,其原理是客户端定时发送Ajax请求到服务器,服务器接收...
Comet4J是一个实现了Comet技术的Java框架,它简化了在Java应用中实现服务器推送的复杂性。使用Comet4J,开发者可以创建服务端的推送通道,通过这些通道,服务器能够将数据高效地推送到多个客户端。Comet4J提供了多种...
标题"comet4j推送Demo"表明这是一个使用Comet4j库创建的示例项目,目的是展示如何在Tomcat7环境下实现服务器推送功能。Tomcat7是一个广泛使用的开源Servlet容器,它支持Servlet 3.0规范,这为Comet4j提供了运行环境...
当服务器推送数据时,客户端的回调函数会被触发,接收并处理这些数据。 5. 测试与优化:运行服务器和客户端代码,测试推送功能是否正常工作。根据实际情况,可能需要调整连接超时时间、错误处理等细节,以保证系统...
Java 实现 Comet 长连接,服务器主动发送消息给客户端是一项关键的技术,它在实时通信、推送服务等领域有着广泛的应用。Comet 是一种基于 HTTP 的持久化连接技术,允许服务器在客户端保持一个打开的 HTTP 连接,直到...
3. **Comet技术**: Comet是一种模拟服务器推送的技术,包括两种主要实现:长轮询(Long Polling)和流(Streaming)。Servlet 3.0的异步处理可以轻松实现这两种技术,减少不必要的HTTP请求和响应延迟。 4. **前端...
4. 实现服务器推送,可以通过Comet技术(如长轮询)或者WebSocket。在这个例子中,考虑到标签提及了“jsp聊天”,可能使用的是基于HTTP的长轮询方式。 5. 当有新消息时,服务器通过已建立的长轮询连接向客户端发送...
DWR使用一种称为Reverse Ajax或Comet的技术来实现服务器推送。它创建了一个持久化的HTTP连接,使得服务器可以在准备好新数据时立即发送,而不需要等待客户端的请求。DWR提供了一种简单的方式来注册JavaScript函数,...
- ** Comet**:DWR也支持Comet技术,这是一种模拟服务器推送的技术,通过长时间保持一个HTTP连接来实现,直到服务器有数据时才关闭连接并发送更新。 在实际应用中,使用DWR服务器推送的例子可能包括实时聊天系统、...
WebSocket API简化了服务器推送的实现,Servlet 3.1及以上版本支持WebSocket,通过`@ServerEndpoint`注解创建WebSocket服务器端点。 5. **Servlet与WebSocket结合**: 虽然标题提到的是Servlet实现,但在现代Web...
在DWR中,服务器推送是通过一种叫做"Reverse Ajax"或者"Comet"的技术实现的。这种方式可以让服务器在接收到客户端的一个请求后,保持连接开放状态,并在合适的时候通过同一个连接向客户端发送数据,而不是等待客户端...
4. **客户端处理**: 客户端(通常是JavaScript)需要设置监听连接,以便接收服务器推送的数据并处理。 5. **测试与优化**: 测试推送功能的正确性和性能,根据需要进行优化,例如调整连接超时时间、处理并发能力等。...
Comet是一种服务器推技术,可以让服务器在适当的时候向客户端发送数据,而不仅仅是响应客户端的请求。在Servlet 3.0的异步环境下,实现Comet变得更加容易。 在实际开发中,我们可以使用Servlet 3.0的异步特性来处理...