`
fkyq01
  • 浏览: 37336 次
  • 性别: 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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics