2009-07-27 17 views
4

ユーザーがインターフェイス上のボタンを押したときに実行されるようになる特にの長時間の操作がありました。これをクライアントに戻すにはどうすればよいでしょうか。ajaxを使用してサーバー側の長い操作を処理するには?

オペレーションでは、何年にもわたってデータの価値があります。 は約20分かかるため、インターフェイスは と同期するつもりはありません。大量のデータサーバー側が生成されているにもかかわらず、 ユーザーが現在表示している月のデータはかなり早く更新されるため、問題はありません。

私は、操作が完了した後、セッション変数を設定し、そのセッション変数のポーリングを考えました。これはそのような ことを実行するための実現可能な方法ですか?しかし、私は特に、ユーザがブラウザを終了して閉じることについての を心配し、長時間実行されているジョブに関するすべてのステータス が失われてしまいます。

処理レコードが開始されて終了したときに処理レコードのどこかにレコードを挿入するほうがよいでしょうか。次に、ユーザー(またはユーザー)が現在実行中/終了/失敗しているジョブを監視できるように、他の種類のインターフェイスを作成しますか?

誰も私が見ることができるリソースがありますか?

どのようにしましたか?

答えて

5

コードのサーバー側部分は、Webサーバーの外部にあるプロセスを生成または通信する必要があります。デーモンによって処理されるべきタスクを実行するためにWebページコードを使用することはちょっと厄介な作業です。

+0

だから私は本質的にテーブル生成を処理するいくつかの種類のスクリプト+渡されたパラメータでexec()を呼び出さなければならないでしょうか?それは、どちらかというとかなりかわいく聞こえません。 –

+1

あなたはそうです。私は2人の間で選択肢が与えられているので、デーモンを常に稼働させて作業を確認している方が好きです。スクリプトはデーモン(通常は一部のDBレコード)に何らかの作業を行う必要があります。その後デーモンはすぐにそれを取得します。もちろん、サービスの作成にはかなり時間がかかります。したがって、プロセスの生成は時には単純で、やや粘着的なアプローチです。 –

+0

こんにちは、応答のための喝采。私はレコードのテーブルをチェックし、それらのレコードを操作するために大まかなダーモンを構築しました。私はおそらく、定期的な間隔で実行して、2人の間のいたずらな通信を節約するようにしています。 –

0

セッションはそれほど現実的ではありませんが、私はおそらく何らかのタスクリストを設計するでしょう。だから私はユーザーごとの仕事の記録を保持することができます。このデザインでは、「完了」タスクを表示してユーザーに知らせることができます。

また、私はワーカープロセスから長い操作を移動します。これは、Webサーバーを再構築できるため必要です。

そして、はい、私は、ajax呼び出しのあるサーバーから数十秒ごとにステータスを要求します。

0

定期的にサーバーにpingを実行してジョブが実行されているかどうかを確認することができます。ユーザーが離れて戻ってきたら、タイマーを再起動します。ジョブが完了すると、そのリンクをクリックしてレポートを開くことができるようにユーザーに指示します(完了できますが、何かを強制的にロードすることはお勧めしません)。

0

私の経験から、サーバー側では、ユーザーごとに実行されているレポートとそのステータスが表示されます。クライアントはこの状態を定期的にポーリングします。 基本的には、checkStatusOf(int session)の代わりに、クライアントに実行中のすべてのジョブとステータスを返すgetRunningJobsFor(int userId)のサーバに問い合わせさせます。

2

20分間はハングアップすることは期待できません。世界で最も協力的なユーザーでさえ、外に出て何か他のことをしたり、忘れたり、窓を閉めたりしなければなりません。このような長い接続時間を許すと、賢明なHTTPタイムアウトが発生する可能性があります。

Spencerが示唆しているように、httpリクエストとは無関係のプロセスを開始するには、最初のリクエストを使用し、AJAXレスポンスでIDを返すか、セッションにIDを格納するか、そのユーザーに対してDBに格納するか、欲しいです。ユーザーは望むものを何でも行うことができ、タスクを中断することはありません。 idを使用してステータスをポーリングすることができます。 DBに保存すると、ユーザーはログオフしてクッキーをクリアすることができます。ログインしても、タスクのステータスは引き続き取得できます。

+0

お返事ありがとうございます。私はこれと一緒に行きました。 –

関連する問題