Tomcat6.0よりCometが標準でサポートされました。

早速サンプルを作って試してみたいと思います。

Tomcat6.0はこちらから
開発にはEclipseを使いますが、3.2まではTomcat6.0に対応していないので、Eclipse3.3をインストールします。

CometのServlet基本形は以下の様になります。

JAVA:
  1. package test;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import org.apache.catalina.CometEvent;
  7. import org.apache.catalina.CometProcessor;
  8.  
  9. public class TestCometServlet extends HttpServlet implements CometProcessor {
  10.  
  11. private static final long serialVersionUID = -7518449035898058102L;
  12.  
  13. public void event(CometEvent event) throws IOException, ServletException {
  14.  
  15. }
  16. }

状況により下記の様なイベントが発生します。
・EventType.BEGIN: 接続処理開始
・EventType.READ: 入力データ
・EventType.END: 処理終了
・EventType.ERROR: エラー

イベントによって処理を切り替えるようにします。

JAVA:
  1. package test;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import org.apache.catalina.CometEvent;
  7. import org.apache.catalina.CometProcessor;
  8.  
  9. public class TestCometServlet extends HttpServlet implements CometProcessor {
  10.  
  11. private static final long serialVersionUID = -7518449035898058102L;
  12.  
  13. public void event(CometEvent event) throws IOException, ServletException {
  14.  
  15. if (event.getEventType() == CometEvent.EventType.BEGIN) { // 接続処理開始
  16.  
  17. } else if (event.getEventType() == CometEvent.EventType.READ) { // データ入力
  18.  
  19. } else if (event.getEventType() == CometEvent.EventType.END) { // 処理終了
  20.  
  21. } else if (event.getEventType() == CometEvent.EventType.ERROR) { // エラー
  22.  
  23. }
  24. }
  25. }

つづく