2

私はSOAPを介してすべてのデータを取得するWebサイトに取り組んできました。一部のページでは、soapサーバーへの呼び出しが3〜4回行われる場合があり、一部の呼び出しには非常に長い時間(30〜60秒)がかかる場合があります。

私が気付いたのは、30秒の長い通話の1つでリクエストを中断し(ブラウザの読み込みを停止)、それほど時間のかからない通話に別のリクエストを発行した場合(短い通話で別のURLを読み込む)です。最初の呼び出しの30秒が経過するまで(またはそう思われるまで)要求を受け取りません。

ここで正確に何が起こっているのでしょうか、それを回避する方法はありますか?
これはpcntlが軽減するのに役立つものですか?
また、Nginxを介してFPMを使用してPHPをセットアップすることも検討しています。これは物事に影響しますか?

みんなありがとう!

4

2 に答える 2

0

両端で (たとえば、wireshark を使用して) トラフィックを盗聴すれば、答えはより明確になると思います。

私の推測では、クライアントまたはサーバーのいずれかが非常に遅い DNS ルックアップを実行しようとしていると思われます。通常、存在しないレコードに対して非常に遅い DNS ルックアップが発生します。リクエストがサーバーに到達するため、失敗した DNS ルックアップがサーバーによってクライアント IP アドレスで実行されていることを意味します。

于 2010-09-20T11:31:15.667 に答える
0

(私は思う)私は同様の問題を抱えていました。SOAPを使用して、JavaサーバーからPHP側でリクエストを受信して​​いました(これはリクエストを送信していました)。

あなたへの質問です。ACK (確認) 応答を返す必要がありますか? はいの場合、リクエストがタイムアウトしていると思います。

これが私に起こったことです:

Java 側では、30 秒以内に ACK 応答が返されることを期待していました。そうしないと、エラーが発生し、要求が再送信されます。

PHP 側では、SOAP リクエストを受信するとすぐに ACK レスポンスを送信しましたが、PHP はスクリプトの実行が終了するまでそれを送信しません。これは、PHP がシングル スレッド言語であるためです。

これを回避するために私がしたことは、SOAP リクエストを受け入れ、それを解析して DB に入れ、ACK 応答を送り返すことでした。次に、SOAP 要求を処理する別のスクリプト (デーモン) を開始します。私の問題を回避するのはハックです。

これがあなたの問題に光を当てることを願っています。

ところで、これは Salesforce (Java 側のもの) とその PHP ツールキット (API) のためのものでした

于 2010-09-20T14:54:42.813 に答える