4

この質問もばかげているように思われるかもしれませんが、私は頭をうまく解決しようとしているので、ちょっと行き詰まっています。

だから、これが私の状況です:

  • 私はAjaxを使用して一連のタスクを実行しています。実際、私は1つ以上のリクエストをキューに入れています(または並列である場合もありますが、実際には重要ではありません)。
  • 進行状況をパーセンテージで表示します(実行されたXタスクのうち1つ)
  • 終了したら、最終結果を表示します。

私がやろうとしていること:

  • 3〜4個の異なるタスクを実行する(= Ajaxを介して非同期的に呼び出される3〜4個の異なるPHPスクリプト)代わりに、1個(= 1個のスクリプト)だけにします。つまり、Xスクリプトを1つに結合します。(簡単だ)。

私が直面している問題:

  • 完了率(Xタスクのうち1つ)を報告するにはどうすればよいですか?

何か案は?

4

4 に答える 4

3

Memcachedタスクが完了するたびにキーを更新していました。次に、ajax-callにmemcachedキーから値を取得させるだけです。

http://php.net/manual/en/book.memcached.php

于 2012-07-30T10:58:10.693 に答える
1

PHPスクリプトに多くのデータを送信する必要がない場合は、「ロングポーリング」アプローチを使用できます。これでは、AJAXを使用せずに、次のようなスクリプトタグを挿入します。

<script src="my_php_script?task1=x&param_t1_1=42&task2=y"></script>

PHPファイルは、次のようなJavaScriptコマンドを送り返すことができます。

updatePercent(12);

各タスクが完了した後。flushコマンドは、コマンドが入ってくるたびにブラウザで実行する必要があります。すべてのタスクの後に必ず呼び出してください。

Cometを調べると、クライアントサーバー接続を処理する方法について他のアイデアが得られる場合があります。

于 2012-07-31T15:17:41.187 に答える
1

元のajaxによってリクエストをデータベースにドロップしてからスクリプトを開始した場合でも、後続のタスクを同じデータベースにドロップしてピックアップする時間はあります(リクエストが完了するまでに時間がかかると想定)。まだ実行中のスクリプト。

それを報告することに関しては、おそらくキューにあるアイテムの数を確認するために簡単なjqueryを実行しますか?または、task.phpファイルでデータベース(場合によっては別のテーブル)を更新して、完了したジョブの数と、現在キューに残っているジョブの数を指定します。

于 2012-07-30T10:41:06.263 に答える
0

キューを管理できます-AJAXリクエストを送信する前に-タスクをキューに入れます(オブジェクトまたは配列の場合があります)。complete完了時にキューからジョブを削除する関数を使用して、AJAXを非同期で実行します。キューからジョブを削除すると同時に進行状況を更新するsetTimeout()か、キューにあるタスクの数とキューに入れられたタスクの総数を確認するために個別に処理することができます:%=(submitted_tasks --items_in_queue)/ submit_tasks * 100

于 2012-07-30T10:47:35.157 に答える