図 CometでWebサイト側から情報を送れるようにする Webサイトが常にHTTPリクエストを受け取っている状態にすることで,Webサイトが必要なときに情報を送れるようにした。
図 CometでWebサイト側から情報を送れるようにする Webサイトが常にHTTPリクエストを受け取っている状態にすることで,Webサイトが必要なときに情報を送れるようにした。
[画像のクリックで拡大表示]

 Cometは,WebサーバーがWebブラウザに対し,必要なときに情報を送信できるようにする技術。WebサーバーとWebブラウザの間に擬似的なコネクションを作って,いつでもWebサーバーから情報を送れるようにする。その擬似的なコネクションをHTTPで実現することがCometの特徴だ。HTTPで実現するため,Webブラウザにソフトを追加したりする必要はない。

 HTTPの通信は,WebブラウザがWebサーバーとの間でTCPコネクションを張ったあと,Webブラウザがファイルを要求し,Webサーバーが要求されたファイルを転送するという流れになる。このためHTTPを基本に忠実に使っている限り,Webサイトは自分から情報を送れない。

 ではCometは,どのようにしてWebサイトからの情報送信を実現しているのか。その鍵は「Webサイトが常にHTTPリクエストを受け取ったままの状態にしておく」ことだ。具体的にはサーバー側に応答を保留したHTTPリクエストが常にある状態にしておく。Webサイトが情報を送信するときは,保留中のHTTPリクエストに応答する格好で,情報を乗せたHTTPレスポンスを送信する(図)。

 Cometを使えば,Webサイトから積極的に情報を送り,Webブラウザ側の表示を変える「プッシュ型」のWebアプリケーションを実現できる。典型的なのはリアルタイムのチャット。ユーザーのWebブラウザのJavaScriptは,Cometを使ってWebサイトからの情報をいつでも受け取れるようにしておく。あるユーザーがメッセージを入力すると,Webサイトのチャット・アプリケーションはログイン中のほかのブラウザにCometを使ってメッセージを転送する。

 使い道はチャットに限らない。Cometを使うことで,複数ユーザーの共同作業ツール,いつ呼び出しがあるかわからないIP電話,異常を検知したらWebブラウザで警報メッセージを表示するネットワーク管理システム,Webサイトのアプリケーションが画面表示の差分を伝えるシン・クライアント――が実現できる。