ページ)双方向通信を実現するHTML5関連技術WebSocketを実装した3つのアプリケーションサーバの実装の違い・性能などを徹底検証する。10ではHTML5の機能が利用できるようになりました。10もリリースされ多くのユーザーがHTML5の恩恵を受けられるようになりました。HTML5の機能の多くは、Webブラウザ側で実装されれば、HTMLやCSSを適切に記述することで利用が可能です。今回取り上げるWebSocketはサーバ側でも機能の実装が必要です。このため、WebSocketを利用する場合はWebブラウザだけではなくサーバを選ぶ必要があります。WebSocketそのものの技術的な解説は、以下のように@ITの過去記事でも充実していますので、今回はWebSocketを実装したサーバそれぞれの実装の違い・性能などを見ていきます。TomcatとJetty、それに加えて少々毛色は異なりますが、JavaScriptを使ってサーバアプリケーションが記述できるNode.jsとNode.jsでWebSocketを利用する際に利用するフレームワークであるSocket.IOです。以降、各サーバ製品の性能比較について、使用する環境、テストパターンを説明していきます。今回利用するサーバと、クライアントは以下の通りです。0.9クライアント側Java-WebSocketjava-Socket.IO.client(Socket.IO用のJavaクライアント)各サーバともに頻繁にバージョンアップが行われており、検証を行った時点で利用していた上記のバージョンはすでに古くなっています。その上、Jettyはメジャーバージョンアップ、Node.jsも0.8系から0.10系に最新版が切り替わり、以下の比較結果が、そのまま今のバージョンでも当てはまらないこともあるかと思いますが、その点はご了承ください。クライアントについては、筆者がJavaでの開発に親しんでいたこともあり、上記のライブラリを利用して作成しています。Tomcat/Jettyは同じクライアントプログラムを使っていますが、Socket.IOは専用のクライアントを作っています。各サーバでの実装状況WebSocketはプロトコル仕様とAPI仕様が別々に作成されており、それぞれ別の団体が仕様策定を行っています。Process)で策定が進められてきました。プロトコルは、すでに多くの版を重ねており、版が進むにつれ機能の追加やセキュリティ対応などがされていますので、クライアントとサーバで対応するプロトコルバージョンに違いがあると利用できません。このプロトコルについて各サーバの実装状況を解説します。Force)で策定が行われています。クライアントとサーバのハンドシェイクでは、プロトコルヘッダ中の「Sec-WebSocket-Version」を利用して、双方で利用可能なバージョンの確認を行います。この「Sec-WebSocket-Version」はhybi-04(draft-ietf-hybi-theWebSocketprotocol-04)以降設定されるようになっています。この「Sec-WebSocket-Version」とプロトコルドラフトバージョンの対応は以下の通りです。RFC6455【1】Tomcatでの対応状況TomcatでのWebSocket対応の歴史はまだ浅く、2012年夏にリリースされた7.0.27から対応しています。プロトコルも最新のバージョンであるRFC6455への対応のみとなっています。このため、古いWebブラウザとの組み合わせで使えないため、注意が必要です。【2】Jettyでの対応状況JettyでのWebSocket対応の歴史は古く2009年リリースの7.0.1から実装が進められており、現在までにリリースされているすべてのプロトコルに対応しています。古いブラウザでサポートされていたWebSocketでも利用できるところが特徴です。【3】Node.js/Socket.IOでの対応状況Node.js上のフレームワークであるSocket.IOではhybi-07からhybi-16のプロトコルに対応しています。hybi-16のSec-WebSocket-Versionは13となりますので、最新のプロトコルバージョンに対応していることになります。このように各サーバでプロトコルの対応状況は異なりますが、最新のWebブラウザであればRFC6455に対応しており、多くのWebブラウザは自動更新により最新版へのバージョンアップを強制するようになっているため、どのサーバを利用しても問題はないと思われます。次にAPI仕様への対応状況です。前述の通り、API仕様はクライアント側とサーバ側で別に仕様が策定されています。ここでは、JavaのAPI仕様についてのみ対応状況を見ていきます。Ballotが完了しています。9からサポートされています。JSR356により、これまでサーバごとにバラバラだったサーバサイドのWebSocketアプリケーション構築手段が統一され、より作りやすくなることと思われます。次ページでは、今回テスト用にアプリケーションを作るに当たり、はまった点、困った点などを記載していきます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。