和田憲幸のブログ

札幌市白石区在住、個人事業のWebエンジニア 和田憲幸(45歳)のブログです。

私のWebChat CGIの作り方

ブログのチャットでご質問を頂いたので私の作り方をちょっと説明。

2013-04-20 05:50:29
入力時間 / 09:23

インターネット黎明期にはいろいろとありましたよねチャットルーム。懐かしいなぁ。時代の流れとともにインスタントメッセンジャーに淘汰され、今ではSNSにとって変わられたわけですが、チャットにはチャットの風情がありますわね。

レガシーなチャットの構造

昔からWebに携わっている人なら知っていると思いますがチャット系CGIの利用を禁止するレンタルサーバは多かったんですよ。なぜなら負荷が高いから。「チャット」と言っても実は構造的にタダの掲示板で、発言毎に単純にリロードする仕組みだったため、帯域や負荷を使うということでレンタルサーバからは敬遠されていました。ま、今のWebサーバのスペックなら問題ないでしょうけどね。

和田のWebChatCGIの作り方

基本的にレガシーな構造と変わりません。発言する際はAjaxでCGIにpostして、更新のチェックはjsonを使っています。ただ、我流なのでこの構造が正しいのかどうかはわかりません。
(1)onload時にログの最新番号をjsonで取得します。
(2)jsonで現在の最新番号を記憶
(3)数秒毎にjsonで番号をチェック
(4)jsに記憶されている番号よりも数が増えていたら、jsonでそこまでのログを取得

という仕組みになっています。負荷軽減のための施策としてチェックにCGIなどの動的プログラムを介していない点ですね。最新番号が記録されたjsonファイルは誰かが発言した時に更新される仕組みですので、基本的には静的ファイルのみを参照するイメージです。

というかなり単純で雑な仕様です。最近だとNode.jsなどサーバサイドでの対応が主流だと思いますが、レンタルサーバでそういう遊びはできませんので、こういうやや強引なドリブル的な手法をとっています。ちなみにこのブログで過去同時セッション150人を越えた当たりでうまく動作していませんでした・・・。60~80人くらいまでは耐えられるというのはわかったんですけどね。ま、レンタルサーバでこれだけぶら下がれれば十分ですわね。

と、いうことで明朝から楽しい時間を頂きありがとうございましたaさん!
ということで30分でつくる約束が40分になってしまいましたが、作りかけのWeb Chat CGIはこちらをご参照ください。

P.1422