cometがアツイ!

最近のwebでちょっと話題のcometという技術があります。今までのHTTP(WEB)では、ブラウザからリクエストを投げて、サーバ側でレスポンスを返すというのが主流でした。そしてWEBチャットなどでは、誰かがチャットに書き込んで無くても、書き込んでいるか定期的(30秒間隔とか)に参加者全員がサーバに確認しにいく仕様でした。そうすると、人数が多くなるほどサーバへの負荷が高くなるわけで、チャットのメッセージがほとんど流れない間の確認リクエストはほとんど無駄になるわけで。。。

Cometを使うと、一度ブラウザでチャットにログインすると、そのチャットの参加者が発言するまでは、通信は発生せず、誰かが発言した時のみ、サーバからブラウザにメッセージを送ることが出来る。つまりサーバの送りたいタイミングでクライアントに一方的にデータが送れるという仕組みです。

で、どいう仕様になってるかっていうと、仕組みは単純で、ブラウザからHTTPリクエストを投げておいて、サーバはレスポンスを返さずにそのコネクションをキープし続ける。そしてサーバが送りたいタイミング(例えば他のチャット参加者が発言した場合)に、レスポンスデータとしてデータを返すと言う仕組み。

そうすると、HTTPサーバのコネクション数が参加者の数だけいるじゃないかってことになって、Apacheとかだと難しいんじゃね?ってことになわるわけで(PerlのCometモジュールがあるので、Apacheでも出来なくはない)、色々見てると、サーバは実装しちゃうってのが多いみたい。まぁ決められたメッセージのやり取りだけであれば、それに特化したHTTPサーバを実装するのはそんなに大変じゃない。

ちょっと時間が空いた時にサーバ側を実装してみようかな。ちなみにクライアント側はAJAXを使って裏でHTTPのリクエスト/レスポンスをやり取りしているので、更新があったときだけその内容の箇所だけを動的に変える仕様が主流です。

javascriptでwavとか再生できるんだっけな。出来るのであれば、昔Javaで作った音声通信のプログラムをjavascriptに置き換えて、cometで音声通信(音声がある時のみデータが送信されるようにして)を作ってみたいな。javascriptで無理ならFlashでやるか。サーバ側はすぐに実装できそうだけど、やっぱりクライアント側に時間がかかりそう。

参考文献
http://d.hatena.ne.jp/dayflower/20061116/1163663677
http://www.atmarkit.co.jp/news/200609/23/lingr.html
http://www.lingr.com/