0

次のように、CRMのAPIと対話できるPHPスクリプトを呼び出すサインアップフォームがあります。

CRM API<->PHPスクリプト<->サインアップフォーム

  1. サインアップフォームは、1回のAJAX呼び出しでPHPスクリプトにいくつかの情報を渡します
  2. PHPスクリプトは、CRMに対して12個のAPI呼び出しを実行して、アカウントを作成し、さまざまなデータを添付します
  3. CRMは、作成したばかりの新しいアカウントIDをPHPスクリプトに返します。
  4. PHPスクリプトは、アカウントIDをサインアップフォームに戻します。この時点で、AJAX呼び出しが完了し、サインアップフォームを続行できます。

問題は#2です。これらの数十回の呼び出しは完了するのに約20秒かかりますが、サインアップフォームに必要なデータは、最初のAPI呼び出しの後に生成されるため、理論的には、そのデータをはるかに早く返し、サーバー側の残りの部分を実行する必要があります。そのAJAX呼び出しを保持すると、常に開いています。

処理が完了する前にクライアントにアカウントIDを出力するflush()とob_flush()を試しましたが、jQuery AJAX接続が開いたままなので、何かが起こる前にサインアップフォーム側で接続が閉じられるのを待っています。 。

では、そのアカウントIDをできるだけ早くフォームに返すための最も簡単なルートは何でしょうか。

たぶん、curlとexecを使用して発生しますか?

 if(signing up){
      stuff
      exec(curl myself, notsignup)
 }
 else {
      bunch of api calls
 }
4

2 に答える 2

1

おそらく、必要な残りのステップのために別のプロセスを作成することを検討する必要があります。1つの方法は、#1の最初のAPI呼び出しが完了した後にできることです。ユーザーに応答し、ユーザー側で残りの20回の呼び出しを完了しようとはしません。

次に、残りを終了するキューを作成します。キューを格納するために、いつでもmysqlにテーブルを作成できます。

次に、バックグラウンドで実行されるcronジョブを作成し、キューをノックアウトします。

注:このcronジョブを開始するだけで、停止しないようにする必要はありません。5分ごとに実行することもできますが、実行を開始する前に、別のcronがまだ進行中であるかどうかを確認してください。その場合は、さらに5分後にチェックインして、実行しても問題がないかどうかを確認します。

お役に立てれば!

于 2012-07-20T16:28:09.337 に答える
1

フォームを返すために最初のAPI呼び出しからの情報のみが必要な場合は、おそらく別のワークフローを試してみます。

  1. フォームはPHPスクリプトを呼び出します
  2. PHPが最初のAPI呼び出しを呼び出す
  3. PHPがフォームに戻る
  4. フォームプロセスの応答
  5. フォームは2番目のPHPスクリプトを呼び出してプロセスを完了します
  6. PHPはAPI呼び出しを終了します(これから何が起こるかは気にしないように聞こえるので、フォームはこの時点で放棄できます)。

ワークフローには、開発者にとってもう少し作業と調整が必要ですが、ユーザーにとって最も応答性の高いインターフェイスを提供します。

于 2012-07-20T16:19:40.497 に答える