0

クライアントごとにレポートを表示することになっているシステムを開発しています。これらのレポートは、実際のレポートを表示する前に事前の計算を行う必要があります。

計算プロセスは面倒で時間がかかる場合があり、レポートが使用するデータが更新される場合があるため、ユーザーはそれらのレポートを再計算できる必要があります。これらの理由から、レポートを生成するスクリプトは、実際にレポートを表示するスクリプトから分離されています。

要するに、私は 2 つのスクリプトを持っています。それらが「generateReport.php」と「showReport.php」と呼ばれているとしましょう。

ユーザーがクライアントをクリックしてレポートを表示すると、'showReport.php' は、必要なデータが既に生成されているかどうかをチェックし、生成されている場合はレポートを表示します。データがそこにない場合、ブラウザを「generateReport.php」に転送し、終了すると、ブラウザを「showReport.php」に転送します

問題は、ユーザーが 2 つのクライアントをクリックし、両方ともデータを生成する必要がある場合に発生します。

最初にクリックされたクライアントは「generateReport.php」に到達し、そこでユーザーはプロセス全体を知ることができるバーを確認できます。2 番目のクライアントが生成されるページはそのまま待機します。

最初のクライアントに時間がかかりすぎると、2 番目のクライアントは明らかにタイムアウトになり、そこにとどまります。

同じブラウザーの 2 つのタブで同じ php ('generateReport.php') を実行しているため、Apache は両方の要求を同時に処理しないことを理解しています。 ) タイムアウトしないウィンドウ?

注: 「generateReport.php」と「showReport.php」には set_time_limit(0) があります。テストのためだけに、明らかに何もしません。

注 2: ホスティング環境で php.ini にアクセスできます

注 3: 長文/退屈なテキスト投稿で申し訳ありません

事前にサンクス!

EDIT1:

ツイスティーさん、お返事ありがとうございます。

  • 要求は、ユーザーがアンカー タグをクリックすることにより、HTTP GET によって生成されます。
  • header("Location: ...") は、ユーザーを generateReport から showReport に移動するために使用されます。
  • はい、ブラウザのタブについて言及していました。
4

2 に答える 2

0

Apache はスクリプトを複数回実行します。なぜ気にするのですか?

レポートの生成に 2 分以上かかる場合、通常はブラウザ自体がタイムアウトになり、待機が停止します。

ここでの典型的なトリックは、「生成」プロセスを別のスレッドで実行して、独自の時間で完了することができるようにすることです。

2 番目のユーザーがブロックされた理由についてはわかりませんが、スクリプトに何かブロックがあると思います。

于 2012-11-30T05:10:11.950 に答える
0

みんなありがとう!

これらの長いタスクをアイドル時間に実行し、要求されたときにデータを既に生成することにしました。

いずれにせよ、Web の応答時間はそれほど長くかかるべきではなく、Web サーバーはそれらの長いプロセスを処理するべきではありません。

改めまして、皆様のご声援をよろしくお願いいたします!

于 2012-11-30T21:36:57.427 に答える