Jetty provides an HTTP server, HTTP client, and Servlet container.

次期リリースとなる「Jetty 7.5.0」と「CometD 2.4.0」の組み合わせは、WebSocketを活用したサーバ/ブラウザ間双方向通信を実現するにあたって魅力的な選択肢になる可能性がある。双方ともまだスナップショットの状況にあるが、スナップショット版を使ってラフなベンチマークを実施した結果がPrelim Cometd WebSocket Benchmarks - Webtide Blogsに掲載された。あまり現実的なベンチマークではないが、WebSocketトランスポートの性能がロングポーリントランスポートと違ってスケールしていることが示されており興味深い。

JettyはJavaで実装されたHTTPサーバ/Servletコンテナ。軽量で高速という特徴がある。最新スナップショット版は最新のJava仮想マシンおよびJITコンパイラで性能が発揮されるように最適化されているほか、最新のWebSocketドラフト版を実装している。

CometDはDojoファウンデーションが支援しているイベントルーチンバス。もともとXMLHttpRequestをバックエンドの通信基盤としつつ、その上にイベントベースの双方向通信処理を可能にすることを目的としていた。通信に使われる仕様は「Bayeux」として定められており、ロングポーリング(デフォルト)とコールバックポーリングという2つのトランスポートをサポートしている。

WebSocketが登場したことでCometDは実験的ながらもトランスポートとして「WebSocket」をサポートするように実装を変更。将来的にはブラウザでJavaScript版のCometDクライアントを使う場合、WebSocketをサポートしたブラウザであれば「WebSocketトランスポート」がデフォルトで使われることになる。

Prelim Cometd WebSocket Benchmarks - Webtide Blogsより抜粋 - ベンチマーク結果

ベンチマークではCometdの「ロングポーリングトランスポート」と「WebSocketトランスポート」の2つを比較。チャットアプリケーションとサーバが動作しているというシナリオを想定し、100クライアント、1,000クライアント、10,000クライアント時の性能を比較している。

XMLHttpRequestを通信のベースに採用している従来の「ロングポーリングトランスポート」ではクライアント数が増えれば性能が落ちていくことは仕組み上避けることが難しく、ベンチマークにおいてもその傾向が出ている。これと比較して「WebSocketトランスポート」は優れた性能を発揮していることが示されている。

WebSocketを使った通信ではHTTP通信に必要となる冗長な処理やヘッダがなく、効率の良い双方向通信が可能になる。WebSocket仕様そのものがまだドラフトの段階にあるが、効率の高い双方向通信を実現するための要の仕様になるとみられており、関連するサーバやクライアントライブラリ、ブラウザの実装なども含めて今後の展開が注目される技術といえる。