• ベストアンサー

Perlで処理の進行状況をユーザーにリアルタイムに知らせる

現在作成中のPerlCGIプログラムを実際に実行すると、かなりのレコード件数の処理をおこなうので、処理終了までの時間がかかると考えられます。 その間ユーザーの画面に、「現在処理中しばらくお待ちください。」という表示だけでは、「おい!本当に動いてるのかよ」と不安にさせることになりますので、1レコードの処理が終了するごとに「1件目の処理が終了しました。」「2件目の処理が終了しました。」・・・というように表示させたいのです。 よくWebページで処理を依頼すると、「現在処理中」とかで、レベルメーターが伸びていくのとかありますが、そんな感じです。 どのようなコードを書けば、レコードの処理ごとにユーザー側のHTMLを更新することが出来るのでしょう。 コーディング例または、参考URLなど教えていただけたら助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.4

私も以前似たようなことをやったことがあります。 参考URLから下の方を読んでみてください。 (「サーバによるタイムアウトを回避」なんかはそのまま使えると思う) ただ、レベルメータはJavaScriptで実装した方がいいかもしれません。 (できんことはないでしょうが、デザイン的に結構制限されると思う)

参考URL:
http://www.bioinfo.jp/tips.html#timeout
souta_n
質問者

お礼

これはかなり参考になりました。 ありがとうございます。

その他の回答 (3)

noname#205944
noname#205944
回答No.3

そうとう以前、標準時間の表示CGI出力で 上から順番に文字(時刻)が出てくるのがありました これはサーバと同期しているようで 当時どんな仕組みなのか調べた覚えがあります(今では完全に忘れてます) コネクションを開いたままで動作(HTMLの追記)していたようでしたが・・ http://www2.nict.go.jp/pub/jst/index-J.html CGIの方は現在はやっていないようですので 応用できると思ったのですけど検証できませんね 非同期なら#2の方の言うとおりJavaScriptでごまかすしかないと思います http://allabout.co.jp/career/javascript/closeup/CU20050615A/index2.htm

参考URL:
http://allabout.co.jp/career/javascript/closeup/CU20050430A/index.htm
souta_n
質問者

お礼

参考URLありがとうございました。

回答No.2

HTTPプロトコルはクライアントがサーバにリクエストして、サーバがそれに答えることしかできません。 サーバ側から定期的にクライアント側に情報を送ることはできないのです。 javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。 なお、仰っているようなレベルメータですが、それはダウンロードが何%終わったとかを示すものではないですか?その場合はあくまで1回のやり取りですよね。そうでない例はHTTPプロトコルの性質上ありえないと思います。

souta_n
質問者

お礼

>サーバ側から定期的にクライアント側に情報を送ることはできないのです。 そうですよね。 >javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。 それってどんなjavascriptのコードですか? >それはダウンロードが何%終わったとかを示すものではないですか? あっ、それは違うというのは分かってます。 例えばASPでLinkShareが個人の報酬集計の際に実行するすると、集計中に■が増えていって、集計後が表示されるみたいな感じです。

  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

深く考えずに定期的に ■ でも出力すればいいのでは。

souta_n
質問者

お礼

それって、CGI側のループ処理を開始する前に、「実行中です」というのと、■を一定時間ごとに増やしていくというJavaScriptを組み込んだHTMLをクライアントに送る、ということですか? それもありだとは思うんですけど・・・ えーっと、処理が終了した時に、終了しました。というHTMLをどうやってクライアントに送るんですか?

関連するQ&A