メメメモモ

プログラミング、筋トレ、ゲーム、etc

Cometについてのメモ

HTTPの基本的な処理の流れは下記のようになります。

  1. クライアント(ブラウザ)が、サーバにリクエストを送る
  2. サーバがリクエストを受け取り、レスポンスをクライアントに送る


この流れが基本になります。つまり、まずはクライアントがリクエストを送ることで初めて、サーバがレスポンスを返すようになるのです。


サーバから任意のタイミングでクライアントにデータを送りたい場合があります。例えば、CGIチャットシステムなどです。サーバー側で、あるユーザーからの書き込みがあった場合、その他のユーザーにその変更内容を送りたい、といった時です。
しかし、HTTPではそれができるようになっていません。クライアントからリクエストが来ない限り、データを送ることができないのです。


ということで、任意のタイミングでサーバ側からデータを送れるようにする方法が「Comet」という手法です。
やり方は、クライアント側でjavascriptのイベントループ内で、サーバにリクエストを送り、サーバはリクエストを受け取ります。そして、サーバは任意のタイミングでレスポンスを返します。
つまり、クライアント側であらかじめリクエストを送っておく、という手法となっています。こうすることにより、擬似的に任意のタイミングでサーバがデータを送れるようになります。


これで、機能は擬似的に実現できるのですが、やはり問題点があります。
サーバ側で、レスポンスをすぐに送らないことになりますので、
多数のリクエストが来る場合、色々と問題が出てきてしまいます。
ここらへんをどう調整するのかは、経験的にパラメータを調整するしかないみたいですね。
ちょっと難しそうです。