CGIで接続を検出するには?

[上に] [前に] [次に]
N.I.V 1999/09/10(金) 02:31:20
自作チャットシステムがある程度安定してきたので、
今度はそれに現在入室している人をリストアップする機能を追加しようと思うのですが、
Perlで現在接続されているかどうかを検出方法はあるのでしょうか?

今のところ、入室時にメンバーリストに追加して、
一定時間毎にタイムスタンプを更新させる様にしておき、
その処理がなされてないユーザーは切断されたと判断されるアルゴリズムを試してますが、
厳密に判断することができませんでした。
何か良い方法があればご教授願います。m(_ _)m

うふ! 1999/09/10(金) 02:37:02
厳密にいうと、httpでサーバに接続した場合って、
ページを取得するごとに毎回接続・切断をくりかえすんですよね?
だからチャットのCGIを動かした瞬間だけ接続されて、すぐ切断されるわけで、
最後に接続された時間を記録する以外にはないようなきがしますがどうでしょう・・

mizna 1999/09/10(金) 18:25:08
httpのシステムは、サーバからクライアントに対してアクセスしているかどうかを調べる手段はありません。
つまり、httpの下で動いているperlでは完全に再現する事は不可能です。
やはり最終発言時間からの経過時間でタイムアウトを取るしかないのでは?
チャットですから発言しない人は接続していないのと同じ事で…
ROMの人が困ってしまいますが。

とほほ 1999/09/11(土) 00:24:13
最近もこの話題が出ましたが、サーバープッシュの機能を用いて、サー
バーとクライアント(のフレーム画面)がずっと接続を保った状態にし
ておいてチャットのやりとりを行うと、可能かも・・・しれません。
http://www.tohoho-web.com/wwwxx004.htm
誰か実現してくれないかなぁ。

N.I.V 1999/09/12(日) 02:05:12
う〜ん。
やはり難しいようですね。
現在のシステムの効率を良くしていってみます。
レスありがとうございました。m(_ _)m

とほほさんの示してくださった方針も試してみます・・・・
ちょっと厳しそうですが。(^^;
あ、それ以前に再勉強が必要かも?

引き続き、「こんな方法がある」ってのがあればお願いします。

エイ@現実逃避中 1999/09/14(火) 11:59:27
忙しいぞ誰か替われぇ!・・・・てのはおいといて、ちょっと考えてみた。

1.入室画面で名前を登録してもらい、名前と時刻をエントリーリストとして保存。
 # 当然他の人が来れば追加。
2.入室時の名前を変数にして
 <META HTTP-EQUIV="Refresh" CONTENT="xx;URL=hoge.cgi?name">
 を含むhtmlを生成させる。
 このhtmlにはエントリーリストの名前を一覧表示(現在の参加者)
3.hoge.cgiがRefreshで起動したらエントリーリストを読み込んで、自分の名前に
 付属するタイムを更新、他人のタイムで一定時間が経過しているものは、
 「タイムアウト」と判断してリストから削除。
 自分の名前が無かったら新たに作る。
4.2に戻る。

なおコレはフレームでも作って小窓でやり、cgiも書き込み閲覧と分けた方が得策。
# 書き込み文章打っててRefreshで飛ばされたら誰でも怒る。

・frame(非対応含む)がいや〜とか、
・Refresh連発(非対応含む)がいや〜とか、
・CGI連発(参加人数が増えるとひっきりなしだ)がいや〜とか
・厳密には接続チェックじゃないのがいや〜とか、
・深く考えてないんでフローがおかしいとかいう苦情は一切受け付けないとか、
等の弊害がある。まあ一つの案ってことで。

質問の意図と外れてたらすまん。

エイ 1999/09/14(火) 15:51:04
俺が上に書いたのN.I.Vさんが最初に書いたことと内容的に同じ事か?
俺の脳味噌腐ってるな〜
申し訳ない。後悔アンド懺悔。

[上に] [前に] [次に]