JettyとGoogle ChromeでWebSocketを試す

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の独自実装なので、他のサーブレットエンジンとの互換性は無い。

自分はチャットぐらいしか用途が思いつかないが、きっとスーパークリエイターが面白アプリを作ってくれる事だろう。