`
iluoxuan
  • 浏览: 582313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet实现Comet服务器推送2

    博客分类:
  • java
 
阅读更多

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);
		 }
分享到:
评论

相关推荐

    Servlet3.0 异步处理 页面推送 Comet 实例

    response.getWriter().write("服务器推送的数据"); } }); } ``` 在异步线程中,我们可以等待数据准备就绪,然后调用`asyncContext.complete()`来结束异步操作,并将结果写入响应。这种方式下,客户端的HTTP连接...

    comet demo 向客户端推送例子

    - 客户端JavaScript代码:负责建立和维持Comet连接,并处理服务器推送过来的数据。 - 服务器端Java代码:创建Servlet或Filter来处理HTTP请求,当有新消息时,通过挂起的HTTP连接向客户端发送。 为了运行这个示例,...

    java comet服务器推送使用步骤

    本文将详细介绍如何使用Comet4J框架来实现Java Comet服务器推送。 #### 二、Comet4J简介 Comet4J是一个基于Java的轻量级Comet框架,它能够帮助开发者轻松地实现实时数据推送功能。Comet4J支持多种服务器环境,并且...

    javaweb实现后台向前台的消息推送 comet4j

    session.sendMessage("这是服务器推送的消息"); ``` 以上就是使用Comet4j在JavaWeb项目中实现后台消息推送的基本流程。在实际应用中,可能还需要考虑连接管理、错误处理、性能优化等问题。通过这个例子,你可以了解...

    Tomcat comet 服务器推技术

    综上所述,Tomcat 的 Comet 技术是通过 HTTP 长连接实现服务器推送,适合实时性要求高的应用。博客中可能会深入讲解原理、实现方式、性能优化和实际应用案例,对于理解和应用该技术非常有帮助。由于没有具体的内容,...

    服务器推送技术之comet4j资源包

    Comet4j就是一种基于Java实现的服务器推送技术框架,旨在简化实时Web应用的开发过程。本资源包包含了实现Comet4j功能所需的关键组件,包括`comet4j.js`脚本文件和`comet4j-tomcat7.jar`服务器端库。 首先,让我们...

    ssm.rar_comet_java comet_java comet推送_聊天 JAVA SSM

    在描述中提到的"Java comet服务器推送(聊天)实现代码",很可能包含了这些Comet技术的具体实现,包括服务器端的Servlet代码和可能的客户端JavaScript代码,用于处理推送的逻辑和展示消息。 SSM框架与Comet结合,可以...

    多种方式模拟服务器推送客户端

    本文将详细探讨如何通过JAVA实现多种服务器推送客户端的方式,包括Ajax轮询、长连接、长轮询以及Iframe刷新。 1. **Ajax轮询** Ajax轮询是最基础的实现方式,其原理是客户端定时发送Ajax请求到服务器,服务器接收...

    web推送 comet技术

    Comet4J是一个实现了Comet技术的Java框架,它简化了在Java应用中实现服务器推送的复杂性。使用Comet4J,开发者可以创建服务端的推送通道,通过这些通道,服务器能够将数据高效地推送到多个客户端。Comet4J提供了多种...

    comet4j推送Demo

    标题"comet4j推送Demo"表明这是一个使用Comet4j库创建的示例项目,目的是展示如何在Tomcat7环境下实现服务器推送功能。Tomcat7是一个广泛使用的开源Servlet容器,它支持Servlet 3.0规范,这为Comet4j提供了运行环境...

    Comet4j推送

    当服务器推送数据时,客户端的回调函数会被触发,接收并处理这些数据。 5. 测试与优化:运行服务器和客户端代码,测试推送功能是否正常工作。根据实际情况,可能需要调整连接超时时间、错误处理等细节,以保证系统...

    Java 实现 Comet 长连接,服务器主动发送消息给客户端

    Java 实现 Comet 长连接,服务器主动发送消息给客户端是一项关键的技术,它在实时通信、推送服务等领域有着广泛的应用。Comet 是一种基于 HTTP 的持久化连接技术,允许服务器在客户端保持一个打开的 HTTP 连接,直到...

    servlet 3.0 异步 推送 聊天室

    3. **Comet技术**: Comet是一种模拟服务器推送的技术,包括两种主要实现:长轮询(Long Polling)和流(Streaming)。Servlet 3.0的异步处理可以轻松实现这两种技术,减少不必要的HTTP请求和响应延迟。 4. **前端...

    ajax+"服务器推送"简单web聊天

    4. 实现服务器推送,可以通过Comet技术(如长轮询)或者WebSocket。在这个例子中,考虑到标签提及了“jsp聊天”,可能使用的是基于HTTP的长轮询方式。 5. 当有新消息时,服务器通过已建立的长轮询连接向客户端发送...

    DWR服务器推送技术(实时)

    DWR使用一种称为Reverse Ajax或Comet的技术来实现服务器推送。它创建了一个持久化的HTTP连接,使得服务器可以在准备好新数据时立即发送,而不需要等待客户端的请求。DWR提供了一种简单的方式来注册JavaScript函数,...

    dwr服务器推送,dwr.jar,推送,服务器ajax,dwr服务推送例子

    - ** Comet**:DWR也支持Comet技术,这是一种模拟服务器推送的技术,通过长时间保持一个HTTP连接来实现,直到服务器有数据时才关闭连接并发送更新。 在实际应用中,使用DWR服务器推送的例子可能包括实时聊天系统、...

    web聊天 serverpush servlet实现

    WebSocket API简化了服务器推送的实现,Servlet 3.1及以上版本支持WebSocket,通过`@ServerEndpoint`注解创建WebSocket服务器端点。 5. **Servlet与WebSocket结合**: 虽然标题提到的是Servlet实现,但在现代Web...

    DWR 简单额服务器推送技术DEMO

    在DWR中,服务器推送是通过一种叫做"Reverse Ajax"或者"Comet"的技术实现的。这种方式可以让服务器在接收到客户端的一个请求后,保持连接开放状态,并在合适的时候通过同一个连接向客户端发送数据,而不是等待客户端...

    comet4j-tomcat7后台信息推送jar包

    4. **客户端处理**: 客户端(通常是JavaScript)需要设置监听连接,以便接收服务器推送的数据并处理。 5. **测试与优化**: 测试推送功能的正确性和性能,根据需要进行优化,例如调整连接超时时间、处理并发能力等。...

    servlet3.0推送聊天室

    Comet是一种服务器推技术,可以让服务器在适当的时候向客户端发送数据,而不仅仅是响应客户端的请求。在Servlet 3.0的异步环境下,实现Comet变得更加容易。 在实际开发中,我们可以使用Servlet 3.0的异步特性来处理...

Global site tag (gtag.js) - Google Analytics