mattyです。
弊社が提供しているWebサービスに
リンクチェッカーというものがあり(無償ですのでぜひご利用ください!)そこでComet(コメット)という手法を利用しています。
今回はCometをまだ利用したことがないという方に向けてご紹介したいと思います。
サーバーの情報をリアルタイムに表示したい
サーバーの情報をリアルタイムに表示したい場合、クライアント側に自動リロード機能を実装することが考えられると思います。これはサーバーがクライアントからの要求がないと情報を配信しないというHTTPの制約が前提にあるからですね。
しかしこの方法だと要求した瞬間以外の時間は表示情報が最新かどうかは本質的に判らない訳です。
サーバー配信でガッチリ
常に最新情報が表示されている!と基本的に言える状態にするには、サーバーが自ら必要なときに情報を配信してくれれば実現出来ます。しつこくせず待っていればいい訳です。
CometはこのHTTPの制約に反するような、疑似的なサーバ配信を実現する手法です。HTTPセッションを接続し続けて必要なときにクライアントに情報を配信します。
いろいろ工夫してHTTPの制約をくぐり抜けている訳ですね。工夫すれば何とかなるものですね。
DWRでComet
前出のリンクチェッカーではCometの実現にDWRを利用しています。
DWR(Direct Web Remoting)とは、AjaxアプリケーションをJavaで開発するための、JavaScript-Java連携用オープンソースフレームワークです。
DWR利用すればJavaScript(クライアント)から簡単にJava(サーバー)を非同期に呼び出す事ができ、DWR 2.0からの機能Reverse AjaxによりJava(サーバー)からJavaScript(クライアント)を非同期に呼び出すことも出来ます。
サーバーでクライアントのJavaScriptを呼べる、、衝撃を受けますね。
動かしてみる
DWRではサンプルがWAR形式でダウンロードページに公開されていて、すぐに動作させることが出来るようになっています。 dwr.warをダウンロードします。
Tomcatでしたら、インストール・ディレクトリ下にあるwebappsフォルダにdwr.warを置いてTomcatを起動するだけでサンプルアプリケーションが立ち上がります。
http://localhost:8080/dwr にアクセスすると画面が表示されます。
サンプルアプリケーションの起動画面。
赤枠内が Reverse Ajax のデモです。2つあります。
2つ目はChatデモで、ブラウザを複数立ち上げて動作を確認できます。
いかがでしょうか。
初めて知ると衝撃的な部分があるように思います。
ただHTTPセッションを張りっぱなしにすることを前提にWebサーバは作られていなかったりするので、アクセスが多くなると大量の同時コネクションを維持できるのか、捌ききれるのかという問題に直面します。。
気になる問題があるもののGoogle WaveでCometが脚光を浴びたりしているようですので、、今後どうなるか動向に注目していきたいと思います。