关于comet
Comet也称反向Ajax或者服务端技术.其思想很简单:将数服务器端推送客户端,而不必等到浏览器请求数据。
comet使用步骤
1.servlet实现CometProcessor
2.得到response
3.设置请求等待时间
4.处理
5.响应界面
简单例子 常常用到多线程
public static class SimpleCometServlet extends HttpServlet
implements CometProcessor {
private static final long serialVersionUID = 1L;
public static final String FAIL_ON_BEGIN = "failOnBegin";
public static final String FAIL_ON_READ = "failOnRead";
public static final String FAIL_ON_END = "failOnEnd";
private boolean failOnBegin = false;
private boolean failOnRead = false;
private boolean failOnEnd = false;
private volatile EventType lastEvent;
private volatile boolean endEventOccurred = false;
public EventType getLastEvent() {
return lastEvent;
}
public boolean getEndEventOccurred() {
return endEventOccurred;
}
@Override
public void init() throws ServletException {
failOnBegin = Boolean.valueOf(getServletConfig().getInitParameter(
FAIL_ON_BEGIN)).booleanValue();
failOnRead = Boolean.valueOf(getServletConfig().getInitParameter(
FAIL_ON_READ)).booleanValue();
failOnEnd = Boolean.valueOf(getServletConfig().getInitParameter(
FAIL_ON_END)).booleanValue();
}
@Override
public void event(CometEvent event) throws IOException,
ServletException {
HttpServletRequest request = event.getHttpServletRequest();
HttpServletResponse response = event.getHttpServletResponse();
HttpSession session = request.getSession(true);
session.setMaxInactiveInterval(30);
lastEvent = event.getEventType();
if (event.getEventType() == EventType.BEGIN) {
if (failOnBegin) {
throw new IOException("Fail on begin");
}
response.setContentType("text/plain");
response.getWriter().print("BEGIN" + "\r\n");
} else if (event.getEventType() == EventType.READ) {
if (failOnRead) {
throw new IOException("Fail on read");
}
InputStream is = request.getInputStream();
int count = 0;
while (is.available() > 0) {
is.read();
count ++;
}
String msg = "READ: " + count + " bytes";
response.getWriter().print("Client: " + msg + "\r\n");
} else if (event.getEventType() == EventType.END) {
endEventOccurred = true;
if (failOnEnd) {
throw new IOException("Fail on end");
}
String msg = "END";
response.getWriter().print("Client: " + msg + "\r\n");
event.close();
} else {
String msg = event.getEventType() + ":" + event.getEventSubType() + "\r\n";
System.out.print(msg);
response.getWriter().print(msg);
event.close();
}
response.getWriter().flush();
}
}