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

comet实现+生产者消费者

阅读更多

Tomcat6 修改server.xml protocol="org.apache.coyote.http11.Http11NioProtocol"


import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.comet.CometEvent;
import org.apache.catalina.comet.CometProcessor;

public class TestComet extends HttpServlet implements CometProcessor{

/**
*
*/
private static final long serialVersionUID = 1908618975033615167L;

private TestClient client = null;

@Override
public void event( CometEvent event ) throws IOException, ServletException {
HttpServletRequest req = event.getHttpServletRequest();
HttpServletResponse resp = event.getHttpServletResponse();

        switch ( event.getEventType() ){
            case BEGIN:
            {
           
                event.setTimeout(30000);
                client = new TestClient(resp);
                client.start();
               
                break;
            }
            case END:
            {
            System.out.println("end");
                event.close();
                break;
            }
            case ERROR:
            {
            System.out.println("error");
                event.close();
                break;
            }
            case READ:
            {
            System.out.println("read");
            event.close();
                break;
            }
        }
    }
}


import javax.servlet.ServletResponse;

public class TestClient {
private ServletResponse resp = null;
private Customer customer;
private Producer producer;
private Thread pro;
private Thread cus;
private SyncStack stack;

public TestClient(ServletResponse resp){
this.resp = resp;

stack = new SyncStack();  
customer = new Customer(resp,stack);
producer = new Producer(stack);

cus = new Thread(customer);  
pro = new Thread(producer);  
}

public void start(){
cus.start();  
pro.start(); 
}

public void setStatus(boolean _status){
customer.setStatus(_status);
}
}

//产品

public class SyncStack {
private String[] str = new String[10];
private int index;

public synchronized void push(String sst) {
if (index == sst.length()) {
try {
System.out.println("enough product,please wait!");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
str[index] = sst;
index++;
}

public synchronized String pop() {
if (index == 0) {
try {
System.out.println("no product,please wait!");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notify();
index--;
String product = str[index];
return product;
}

public String[] pro() {
return str;
}
}

//生产者

public class Producer implements Runnable {
private SyncStack stack;
private boolean isRunning = true;
public Producer(SyncStack stack) {
this.stack = stack;
}

public void run() {
while(isRunning){
for (int i = 0; i < stack.pro().length; i++) {
String product = "Product" + i;
stack.push(product);
System.out.println("producted: " + product);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}// while
}
}

//消费者

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletResponse;

public class Customer implements Runnable{
private ServletResponse resp = null;
private SyncStack stack;
private boolean isRunning = true;

public Customer(ServletResponse resp,SyncStack stack){
this.resp = resp;
this.stack = stack;
}

@Override
public void run() {
// TODO Auto-generated method stub
while(isRunning){
for (int i = 0; i < stack.pro().length; i++) {
String product = stack.pop();
PrintWriter pt;

try {

pt = resp.getWriter();
pt.println(product);
pt.flush();
resp.flushBuffer();
System.out.println("consumed: " + product);

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}//while
}

public void setStatus(boolean _status){
this.isRunning = _status;
}
}

jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>

<script language = "javascript">

function go(){

var url = "http://109.123.112.190:8080/abc/comet";
var request ;
request = new XMLHttpRequest();
request.setRequestHeader("Content-Type","application/x-javascript;");

request.open("GET",url,true);
request.send(null);

request.onreadystatechange = function(){
if(this.readyState == 3 && this.status == 200){
if(request.responseText){
document.getElementById("number").innerHTML = request.responseText;
}
}
};

}

</script>

</head>
<body>
<input type = "button" name = "go" onclick = "go();" value="go"/>
<div id = "number"></div>
</body>
</html>
分享到:
评论

相关推荐

    Comet实现聊天室

    Comet实现聊天室 运行时请将Tomcat的server.xml文件内的 connectionTimeout="20000" redirectPort="8443" /&gt; 改为 connectionTimeout="20000" redirectPort="8443" /&gt; 登陆的时候请记得先修改index.jsp...

    comet4j+tomcat6+tomcat7并附完整版Demo

    【标题】"comet4j+tomcat6+tomcat7并附完整版Demo" 提供的是一种在Java后端与前端之间实现长连接通信的解决方案,主要涉及到的技术包括Comet4j、Tomcat 6和Tomcat 7。Comet技术是用于实现实时Web应用的一种方法,它...

    用DWR comet+Spring实现服务器推送的例子--网页聊天室

    标题中的“用DWR comet+Spring实现服务器推送的例子--网页聊天室”涉及到的是Web开发中的实时通信技术。DWR(Direct Web Remoting)是一个开源Java库,它允许JavaScript在浏览器和服务器之间进行直接的、安全的远程...

    comet4j+tomcat7 demo

    Comet4j是实现Comet的一种方式,它简化了在Java应用中集成实时推送的复杂性。该库提供了多种策略来实现长连接,包括HTTP Streaming、HTTP Chunked Transfer和Ajax Long Polling等。在Tomcat7这样的Servlet容器中,...

    tomcat+comet实现终端与服务端同步的小例子

    【标题】:“Tomcat+Comet 实现终端与服务端同步的小例子” 在这个主题中,我们将探讨如何使用Apache Tomcat服务器和Comet技术来实现浏览器客户端与服务端的实时通信。Comet是一种Web应用程序设计模式,它允许数据...

    JQuery+Comet+IAsyncHttpHandler 简易聊天室

    总的来说,“JQuery + Comet + IAsyncHttpHandler 简易聊天室”项目展示了一个利用现代Web技术实现实时通信的例子,结合了前端的jQuery库和后端的异步处理技术,实现了高效且实时的聊天功能。这样的设计思路对于学习...

    comet的ajax实现

    comet两种实现之一的ajax实现,内部有源代码,这是一个聊天室的例子

    tomcat实现comet例子 comet tomcat 随机数

    tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不...

    javaweb消息推送 基于comet实现局域网内部通讯(聊天室)demo

    javaweb消息推送 基于comet实现局域网内部通讯(聊天室)demo 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 消息缓存机制,确保长轮询工作模式下不丢失...

    comet demo 向客户端推送例子

    这个"comet demo"是一个展示如何在Java环境下利用Tomcat服务器实现Comet技术的实例。Tomcat 6.0是Apache软件基金会开发的开源Servlet容器,支持各种Java Web应用的部署,包括Comet技术。 首先,Comet的核心在于保持...

    comet4j+Dome+jar

    comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6...

    comet4j 简单例子+文档

    Comet4j是一个Java框架,专门用于实现Comet技术,这是一种服务器推送技术,允许服务器向客户端实时推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术常用于实现聊天、实时通知、股票更新等功能,它克服...

    Spring整合DWR comet 实现无刷新 多人聊天室代码整理

    Spring整合DWR(Direct Web Remoting)和Comet技术,是一种高效的实现Web应用程序实时通信的解决方案,特别适用于创建如多人聊天室这样的实时交互应用。在这个项目中,Spring作为后端框架,负责业务逻辑处理和控制...

    comet4j.js+comet4j-tomcat7jar包资源

    Tomcat 7是一个流行的开源Java应用服务器,支持Servlet和JSP标准,Comet4J利用其特性来实现 comet 技术。你需要将这个jar包添加到Tomcat的类路径(classpath)中,以便在服务器端运行Comet4J相关的代码。 2. `comet...

    gwt-comet-jar包+实例+source.jar包,

    里面东西很多,都是关于GWT-COMET的内容,实现gwt的服务器推技术,包括gwt-comet-examples-1.2.3:google官网上的Test实例;gwt-comet-1.2.3.jar:jar包,gwt-example:聊天实例源代码(.java的),gwt-event-source...

    springMVC+ibatis+jstl+easyui+comet4j

    在本项目中,Comet4j可能被用来实现实时通知、聊天室等功能,提升应用的交互性和实时体验。 综上所述,这个项目集成了多种技术,构建了一个功能强大的Java Web应用,涵盖了从前端用户界面到后端数据处理的完整流程...

    comet框架例子项目

    6. **WebSocket**:虽然不是传统意义上的Comet,WebSocket提供了全双工、低延迟的连接,非常适合实时通信应用,许多现代的Comet实现会结合WebSocket以提供更好的性能。 7. **错误处理和重连机制**:在Comet应用中,...

    http长轮询技术comet的实现

    通过comet实现了一个聊天功能。 1.需要在tomcat的server.xml里面配置 connectionTimeout="20000" redirectPort="8443" /&gt; 2.需要在tomcat的context.xml里面配置 在Context标签里面配置: ...

    11智达办公自动化管理系统(SSH+Ajax+comet+oracle实现共8200

    属于javaEE技术,对着源码讲解。视频可到优酷http://v.youku.com/v_show/id_XNTQ0NzQxMzYw.html?f=19180666或者直接搜名字。密码见文档

Global site tag (gtag.js) - Google Analytics