夕方から雨?今日も朝からポッカぽっか~~あ。ああ幸せなり。
Webプログラムでの基本「サーバサイドで重たい処理を実行中にブラウザのタイムアウトを回避する」っていうので若干はまってしまっていました。
考え方はあっているのに旨く動かない・・・・いわゆる bug中やつで。やっとさ解決しました。どーやら、ちょっとしたことが原因だったらしい。
ちなみに下記のソースが、ブラウザのタイムアウトを回避するちゅうやつです。
※時間があったら、またまとめて本サイトの方の記事にしときます
sub handler {
print ".";
$SIG{ALRM} = \&handler; # タイムアウトを回避するために再設定
alarm 10;
}
$| = 1;
print "Content-type: text/plain\n\n";
my $pid = fork;
die unless defined $pid; # fork 失敗で異常終了
if($pid) { # 親プロセス
$SIG{ALRM} = \&handler;
print "<!--";
alarm 10;
wait; # 子プロセスの終了待ち
alarm 0;
print "-->";
html結果の表示
exit;
}
# 子プロセス
#close STDOUT;
#以下、永遠長い処理だけど・・・・
#永久ループはだめよ(笑)
ここが参考になりまするぅ
→ サーバによるタイムアウトを回避&重い処理の保護
→ シグナルの種類はOSによって違いますが、kill -l で確認できます
→ クッキー&セッションを使用する
コメントする