- ベストアンサー
Perlで処理の進行状況をユーザーにリアルタイムに知らせる
現在作成中のPerlCGIプログラムを実際に実行すると、かなりのレコード件数の処理をおこなうので、処理終了までの時間がかかると考えられます。 その間ユーザーの画面に、「現在処理中しばらくお待ちください。」という表示だけでは、「おい!本当に動いてるのかよ」と不安にさせることになりますので、1レコードの処理が終了するごとに「1件目の処理が終了しました。」「2件目の処理が終了しました。」・・・というように表示させたいのです。 よくWebページで処理を依頼すると、「現在処理中」とかで、レベルメーターが伸びていくのとかありますが、そんな感じです。 どのようなコードを書けば、レコードの処理ごとにユーザー側のHTMLを更新することが出来るのでしょう。 コーディング例または、参考URLなど教えていただけたら助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
私も以前似たようなことをやったことがあります。 参考URLから下の方を読んでみてください。 (「サーバによるタイムアウトを回避」なんかはそのまま使えると思う) ただ、レベルメータはJavaScriptで実装した方がいいかもしれません。 (できんことはないでしょうが、デザイン的に結構制限されると思う)
その他の回答 (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ありがとうございました。
- happymonmon
- ベストアンサー率0% (0/5)
HTTPプロトコルはクライアントがサーバにリクエストして、サーバがそれに答えることしかできません。 サーバ側から定期的にクライアント側に情報を送ることはできないのです。 javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。 なお、仰っているようなレベルメータですが、それはダウンロードが何%終わったとかを示すものではないですか?その場合はあくまで1回のやり取りですよね。そうでない例はHTTPプロトコルの性質上ありえないと思います。
お礼
>サーバ側から定期的にクライアント側に情報を送ることはできないのです。 そうですよね。 >javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。 それってどんなjavascriptのコードですか? >それはダウンロードが何%終わったとかを示すものではないですか? あっ、それは違うというのは分かってます。 例えばASPでLinkShareが個人の報酬集計の際に実行するすると、集計中に■が増えていって、集計後が表示されるみたいな感じです。
- mendokusa
- ベストアンサー率13% (359/2726)
深く考えずに定期的に ■ でも出力すればいいのでは。
お礼
それって、CGI側のループ処理を開始する前に、「実行中です」というのと、■を一定時間ごとに増やしていくというJavaScriptを組み込んだHTMLをクライアントに送る、ということですか? それもありだとは思うんですけど・・・ えーっと、処理が終了した時に、終了しました。というHTMLをどうやってクライアントに送るんですか?
お礼
これはかなり参考になりました。 ありがとうございます。