私は巨大なPHPアプリケーションである多くのWebサービスを使用しています。通常、それらのすべてが 10 秒以内にデータを送信してくれますが、応答しない人がいて、すべてのプロセスがフリーズすることがあります。
だから私の質問は、定義された時間後に応答しない場合、すべてのシステムをフリーズせずに PHP で SOAP Web サービスを使用するにはどうすればよいかということです。
私は巨大なPHPアプリケーションである多くのWebサービスを使用しています。通常、それらのすべてが 10 秒以内にデータを送信してくれますが、応答しない人がいて、すべてのプロセスがフリーズすることがあります。
だから私の質問は、定義された時間後に応答しない場合、すべてのシステムをフリーズせずに PHP で SOAP Web サービスを使用するにはどうすればよいかということです。
PHP は、マルチスレッドと非同期プログラミングをサポートしていません。ただし、fork
この SOAP 要求を実行する別のプロセスを実行できます。もちろん、この新しいプロセスからクライアントに一部のデータを送信することはできませんが、たとえばその応答を DB に書き込むことはできます。
ソリューションは、マルチスレッドpenarturとは関係ありません。唯一行うべきことは、 nutrijaが示唆するように、ノンブロッキング ストリームを使用し、select() 関数を使用して I/O 多重化を使用することです。既に実装されているソリューションの 1 つがこのリンクにあります: Making PHP's SOAP client asynchronous
JavaScript を使用して、SOAP 要求を行う別の PHP ファイルへの AJAX 呼び出しを行うことができます。
stream_set_blockingを使用して、http/https ストリームを非ブロッキング モードに設定できます。