近年Ajax技術を利用した、リッチなWebアプリケーションが次々と登場しています。
皆さんも知っている通り、Ajax技術とは、要は「画面表示と非同期でサーバからのデータ受信を可能とする」技術のことです。
バックグラウンドでデータ要求/受信を行い、受信終了後にダイナミックに表示を切り替えます。これにより、非常に柔軟にUI を構築することができるという利点があります。
さて、ここで注目したいのは「データ受信」についてです。通常HTTPでのデータ受信は、クライアント主導です。つまり、「クライアントからデータ要求して、サーバがその結果を返す」と言う一連の流れで、データ受信を行なっているわけです。
では、下記のような要求を満たすアプリケーションを作成する場合を考えてください。
要求1:データ更新が秒単位で行なわれる。クライアント情報も秒単位で変化させたい。
要求2:いつデータ更新が発生するか分からないが、瞬時にクライアント情報を変化させたい。
恐らくWebアプリケーションとして作成した場合、定周期でポーリングすることとなるでしょう。
要求1を満たすには、1秒周期のポーリングが必要です。しかし1秒でデータ要求〜データ受信を行なえるでしょうか?
クライアントはポーリングのみで手一杯になるかも知れません。それでは、要求2を満たすにはどうするでしょう。ある程度の遅延を見込んだ周期でポーリングを行なうことになるでしょう。つまり要求2は満たすことが出来ないこととなります。
このようにクライアント主導の通信だけでは限界があるいうことが理解いただけたと思います。
そこで、考えられたのがサーバPush型データ通信「Comet」です。サーバ側のタイミングでクライアントにデータを送信する。 またクライアントのメソッドをコールする技術です。
普通に考えれば、「不特定多数のクライアントに対して接続要求などできるはずが無い」とか、「ファイアウォールはどうやって抜けるのか」とか「そもそもブラウザってリッスンできるの」みたいな疑問が沸沸とわきあがってくるのではないでしょうか?
「Comet」では特別なプロトコルを使用するわけではありません。上記のような難しい問題は無く、言ってみれば裏技的な方法でサーバPush型のデータ通信を実現しています。
今回の技術レポートでは、この「Comet」と類似のPush技術についての解説を行なおうと思います。サンプル等用意しているので実際に触ってみて感触を味わっていただければ幸いです。
前へ 目次へ