NPHでチャットログ更新

[上に] [前に] [次に]
ぱよ☆ [E-Mail] 1999/05/21(金) 11:57:54
いつも質問ばかりで恐縮です。

 現在自分で組んでいるチャットスクリプトでネスケ専用に
NPH対応のモードを設けようかと思っています。NPHを利用
しての更新をするとしたらwhile文で無限ループを作って、更新
をチェックするのは分かるんですが、このスクリプトを起動した
ユーザーが何らかの理由で落ちてしまった場合、サーバー上で
ループし続けてしまうんでしょうか?
もし、そうだとしたら、タイムアウトか何かで監視する必要が
あると思うのですが...何か良い方法があったら教えて下さい。
宜しくお願いいたします。

なえ 1999/05/21(金) 12:07:30
とほほさんのNPHスクリプトのサンプルの場合は、
unless (print ""){
last;
}
という具合にprintできなかったら抜けるようにしてます。
多分これで大丈夫だと思いますけど、私もちょっと試して見ます。

なえ 1999/05/21(金) 12:46:15
linux+Apacheの環境ですとちゃんと終了しました。
WIN+AnHTTPdだと処理が終了せず残っちゃいました。

ぱよ☆ [E-Mail] 1999/05/21(金) 16:34:35
 なえさん、わざわざ確認までしていただきまして本当に
ありがとうございます。わたしが利用しているサーバーは
UNIX+Apacheだったと思うので、恐らくこれで大丈夫でしょう。

>WIN+AnHTTPdだと処理が終了せず残っちゃいました。
このような場合、管理者サイドでなにか作業をするまで
残り続けてしまうものなのでしょうか?
初歩的な質問かもしれません(^^;)スミマセン。

 それから、もし確実に終了させる方法があれば教えて
頂きたいのですが... 難しいのでしょうか。
よろしくお願いします。

なえ 1999/05/21(金) 18:10:20
処理が残っちゃった場合、killするしかありません。(WIN系ならタスクマネージャー開いて終了)
また、確実に終了させる方法については調べてみます。
ちなみにSunOSでもちゃんと終了しました。
WIN+AnHTTPdが特殊なんじゃないかと思うんですが...

とほほ 1999/05/22(土) 02:09:05
私の環境(Win95+AnHTTPD v1.08)だと、正常に終了してくれます。
はてさて・・・

ぱよ☆ [E-Mail] 1999/05/24(月) 08:21:58
 なえさん、とほほさん、動作確認(?) 本当にありがとうございます!!
え〜、とりあえずのところ、「print = ""」を利用する事で処理が中断
できるだろうと判断して作業を続けてみます。
 ところで、ここまで来てふと疑問が出来てしまったのですが、
既に一つのNPHスクリプトを動作させたユーザーが再度同じ
スクリプトを起動しようとした場合、同じスクリプトが二つ常駐
してしまうのでしょうか。それともどちらかのスクリプトが優先
されて片方は終了させられるのでしょうか。
 チャットで書き込みの処理をした後、更新されたログを表示
するようにしてしまう事が問題になるかどうか不安なもので...
AnHTTPdというのはローカルのPCでCGIが使えるヤツですよね。
わたしも挑戦してみようかな。電話代も助かるし...(^^;)

なえ 1999/05/24(月) 09:55:15
既に一つのNPHスクリプトを動作させたユーザーが再度同じ
>スクリプトを起動しようとした場合、同じスクリプトが二つ常駐
>してしまうのでしょうか。それともどちらかのスクリプトが優先
>されて片方は終了させられるのでしょうか。
> チャットで書き込みの処理をした後、更新されたログを表示
>するようにしてしまう事が問題になるかどうか不安なもので...
その場合、古いほうの処理は終了します。
linux+Apacheで確認しました。

それから確実に終了させる方法ですが、一定の時間が過ぎたらtimeoutさせるのはどうでしょうか?
処理の先頭で
$timeout = 60*30;
$start_time = time;
としておき、ループの終了判定を
unless (print ""){
last;
}
if (time > $start_time + $timeout){
last;
}
という具合に2段構えにするんです。
これだとうちのWIN+AnHTTPdでもちゃんと終了しました。
ただこれだとタイムアウトされちゃったらログ表示画面が更新されないので、
クライアントプルと組み合わせる必要があります。
HTMLのHEAD部分に<META HTTP-EQUIV="Refresh" CONTENT="3">で
タイムアウトになっても3秒後に再起動かかります。

なお、これ調べててわかったのですが、メタタグのRefreshで指定した時間の基準は
IEとネスケで違うようです。
IEはページの読み込みが開始してからの時間ですが、
ネスケは読み込みが完了してからの時間のようです。

ぱよ☆ [E-Mail] 1999/05/24(月) 10:51:15
[[解決]]
 なえさん、本当にありがとうございます。
とても有意義な返答が頂けて感激しています(^-^)
早速、今晩にでも参考にして作業をしてみようと思います。
いちお解決にしておきますね。

 なえさん、とほほさん、本当にありがとうございました。

#しかしIEとNN(NC)って、結構違いが沢山あって
 困りますね...(^^;)

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