2012-04-19 11 views
0

私は巨大なPHPアプリケーションをたくさん使っています。 通常、それらのすべてが10秒以内に私にデータを送信しますが、時には私は応答せず、すべてのプロセスを凍結する人がいます。PHP non-blocking soap client

私の質問はどのように定義された時間の後に応答しない場合、すべてのシステムをフリーズせずにPHPでsoap webserviceを使用することができますか?

答えて

3

PHPはマルチスレッドと非同期プログラミングをサポートしていません。しかし、forkこのSOAPリクエストを実行する別のプロセスができます。もちろん、この新しいプロセスから一部のデータをクライアントに送信することはできませんが、たとえば、その応答をDBに書き込む。

+0

PHPでフォークするのは、コマンドラインからスクリプトを呼び出すことによって達成されます。 – dmp

+0

SOAPリクエストを作成するために別のテクノロジを使用するのは唯一の解決策です。 – Awea

+0

ちょうどこの質問を非常に便利な非同期石鹸ラッパーライブラリでバンプしたいと思っています:http://en.dklab.ru/lib/Dklab_SoapClient/ – bonez

0

stream_set_blockingを使用すると、http/httpsストリームを非ブロッキングモードに設定できます。

0

SOAPリクエストを行う別のPHPファイルへのAJAX呼び出しを行うためにJavaScriptを使用することができます。

+0

私はすでにこのようなものを使用しています。私は5種類のWebサービスをAjax ( – Awea

+0

)AJAXを使って呼び出したPHPスクリプトで$ _SESSIONデータを使用していますか? – lugte098

+1

session_write_close()をあなたの先頭に置いてみてくださいAJAXで呼び出されているPHPスクリプト – lugte098

1

解決策はマルチスレッド化と関係がありませんpenartur。唯一行うべきことは、非ブロックストリームを使用するI/O多重化を使用し、nutrijaが示唆するようにselect()関数を使用することです。すでに実装されているソリューションの1つがこのリンクにあります:Making PHP’s SOAP client asynchronous