斬新なHTTPチャット

まえおき

いや、別に斬新でもないだろうが既にあるか調べるのが面倒くさかったのと、思いついた事を書きたかったため書いてみる。

構成

  • メインプログラム(HTML)
  • 書き込みプログラム (PHP)
  • 更新日時(ID)情報(TXTまたはHTML)
  • 現在の画面情報(未定)
  • 差分取得プログラム(PHP

解説

メインプログラム

ただのGUI用。
フレーム構成にしたくない場合通信はAjax使わないと駄目かも。
イメージではダミーフレーム3つと、メッセージ表示欄、メッセージ入力欄くらいのUI。この辺はHTMLのみで構成。
読み込み側=========

  1. 一定時間ごとに更新日時情報をダミーフレームへのlocation.replace(またはAjax使用)で読みに行き
  2. それと今記憶している情報が異なっていたら
  3. 差分取得プログラムをダミーフレーム2を使用した同様の手法でキックし
  4. 結果を画面に反映させる

書き込み側=========

  1. 書き込みプログラムをダミーフレーム3を使用した同様の手法でキックする

※メッセージはPOSTで、画面の更新は読み込み側の自動更新でやればいいかな。

書き込みプログラム

受け取った内容でチャット側の内容を更新。 + 現在の画面情報を更新。

更新日時(ID)情報

更新されたかどうかの情報のみ保持。
メイン画面側のダミーフレーム1のロード完了がわかりにくいようなら、ロード完了をonLoadで通知するためHTMLに、大丈夫そうならtxtで十分。

現在の画面情報

現在の画面情報を保持してるだけのデータ。
書式を保持するならHTMLでそのまま保持してるのが楽かもね。
ログとか後々保存出来るようにする場合は「現在の」以外のデータを別途検討。

差分取得プログラム

渡されたパラメータから先の「現在の画面情報」を返す。

蛇足

10人くらいでやったら秒間何HTTPリクエスト発生するのやら。
多分80リクエストくらいなら1台のサーバ、家庭用の回線で捌けると思うのだけど。
基本的にHTTPはクライアントプルじゃないと無理なんで、HTTPだけでチャットやろうとしたらこの構成が一番軽量なんじゃないかな、という案。
多分Ajax使っても似たような感じになると思うが、あまり調べてないが明示的にKeepAliveを指定出来る等があればAjax(のプレーンテキスト通信)の方が高速になりそう。
よかったら誰か作ってみてくれ!