JavaのサーブレットコンテナであるJetty 7には WebSocketServlet があり、HTML5 WebSocket アプリケーションのサーバサイドを簡単に実装できるようだ。
試しにチャットの原型のようなプログラムを書いてみた。gitで公開しているのでcloneして試してみて。
git clone git://github.com/paulownia/websocket-sample.git
websocket.jar をダブルクリックすると Jetty が立ち上がる。次に Google Chrome で http://localhost:8080/ にアクセスする。connected. と表示されていれば WebSocket の接続成功だ。テキストフィールドに適当なメッセージを入力し、Shiftを押しながらEnterを入力するとサーバにメッセージが送信され、サーバは接続している全てのクライアントへメッセージを配信する。複数のウィンドウを開いていると、各ウィンドウで同時にメッセージが表示されるのがわかる。
ソース
WebSocketServlet クラスを継承して doWebSocketConnect をオーバーライドする。
public class SampleWebSocketServlet extends WebSocketServlet { @Override protected WebSocket doWebSocketConnect(HttpServletRequest req, String protocol) { return new SampleWebSocket(); } }
WebSocket インターフェースは4つのメソッドを持つ。
public class SampleWebSocket implements WebSocket { @Override public void onConnect(Outbound outbound) { // } @Override public void onDisconnect() { // } @Override public void onMessage(byte frame, String data) { // } @Override public void onMessage(byte frame, byte[] data, int offset, int length) { // } }
onConnect が接続開始時、onMessageがクライアントからメッセージを受け取った時の処理。これらを実装して WebSocket アプリケーションを作成する。サーバサイドはJettyの独自実装なので、他のサーブレットエンジンとの互換性は無い。
自分はチャットぐらいしか用途が思いつかないが、きっとスーパークリエイターが面白アプリを作ってくれる事だろう。