削除された内容 追加された内容
MoreNet (会話 | 投稿記録)
Mrmt (会話 | 投稿記録)
m キャピタライズ修正
3行目:
'''Comet'''(コメット)とは、[[ウェブアプリケーション|Web アプリケーション]]を構築する際に利用される技術で、この技術を使うと、[[サーバ]]で発生した[[イベント (プログラミング)|イベント]]を[[クライアント]]からの要請なしに[[クライアント]]に送信することができる。
 
Comet はこのような通信を実現するための複数の手法をまとめた概念である。これらの手法はブラウザにプラグインを追加することなく、([[JavascriptJavaScript]] のような)デフォルトの機能で実現されるものである。理論的には Comet は、ブラウザがデータを要求する形の既存のウェブのモデルとは異なっている。実際は Comet アプリケーションは [[Ajax]] と [[Push技術#Long polling|Long polling]] を使用してサーバ上の新規データを取得する。
 
== なぜ必要なのか ==
従来の方法では、ウェブページはクライアントからリクエストがあったときのみクライアントに配信されていた。クライアントがリクエストするたび、ブラウザはサーバへの [[Hypertext Transfer Protocol|HTTP]] コネクションを生成し、ウェブサーバはクライアントにデータを返し、そのコネクションは閉じられる。この方法の欠点は、ユーザが明示的にページのリフレッシュを行うか、またはユーザが新しいページに移動する場合にしか表示されるページが更新されないことである。ページをすべて転送するのには長い時間を要するので、ページのリフレッシュは多大な遅延を生みだす。
 
この問題を解決するために、ブラウザに変更があった部分だけをリクエスト・更新させる技術である [[AJAXAjax]] を用いることができる。この方法だとデータ通信量が従来の方法より少なくなるため、遅延の度合も少なくなり、サイト全体のパフォーマンスは向上するといえる。さらに言えば、非同期通信を用いることにより、ユーザは段階的にデータを受信しながら作業をすることが可能になるため、その意味でもパフォーマンスは向上する。
 
しかし AJAXAjax を用いたとしても、クライアントがあるデータを取得する前にはそれに対するリクエストを出さなければならないという苦しい問題は依然存在する。この問題は、例えば「あるユーザがデータを送ってきた」というようなサーバ上でのイベントが発生するのを待機する必要のあるアプリケーションを設計するときに大きな障害となる。
 
サーバ上でイベントが起こったかどうかを周期的に確認させる(いわゆるポールループさせる)ようにアプリケーションを設計するのはひとつの解決策である。しかしこの方法は、アプリケーションは結局サーバ上のイベントが完了したかどうかの問い合わせに多くの時間を使ってしまうため、あまりエレガントとはいえない。また、ネットワークの帯域も多く消費されてしまう。