Tomcat6のcometを試す。
Tomcat6を使ってCometができるようなので試す。
http://www.oki.com/jp/oss/document/tomcat/tomcat60-docs-ja/aio.html
Cometの通信を扱うクラスは、org.apache.catalina.CometProcessorインタフェースをしたサーブレットとして用意する。
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.apache.catalina.CometEvent; import org.apache.catalina.CometProcessor; public class CometTestServlet extends HttpServlet implements CometProcessor { public void event(CometEvent event) throws IOException, ServletException { } }
まずは、CometEventの中を見たいので、eventメソッドの中に以下のコードを追加。
String eventStr = ToStringBuilder.reflectionToString(event,
ToStringStyle.MULTI_LINE_STYLE);
System.out.println("Recieve CometEvent ----------------");
System.out.println(eventStr);
Tomcat6を再起動の前に、web.xmlにCometTestServletを登録。
<servlet> <servlet-name>CometTest</servlet-name> <servlet-class>comettest.CometTestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CometTest</servlet-name> <url-pattern>/comet</url-pattern> </servlet-mapping>
さらに、server.xmlを以下のように変更。(ちなみに、server.xmlを変更せずにCometTestServletを呼び出すと、405 が返る。)
<!-- default <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
準備ができたので、Tomcatを再起動して http://localhost:8080/cometTest/comet にアクセスする。
と、ブラウザはレスポンス待ちの状態まま待機して、Tomcatには以下のようなログが出力される。
Recieve CometEvent ---------------- org.apache.catalina.connector.CometEventImpl@ecb281[ request=org.apache.catalina.connector.Request@1315d34 response=org.apache.catalina.connector.Response@1de256f eventType=BEGIN eventSubType=<null> ]
これで、ブラウザから、Tomcatに対して常駐接続が張られたらしい。
あぁ。
なんか眠くなってきた。