このライブラリを使用すると、たとえば、コンストラクタからのように、ブロックからサイトのページを構築できます。 すべての要求は並行して発生しますが、各ブロックは、SOAPを介して個別に要求されます。 ブログの1つが割り当てられた時間(タイムアウト)を満たさなかった場合、ページに表示されない場合があります。
組み込みのPHP SoapClientと比較して、追加機能がサポートされています。
- 複数のリモートプロシージャへのリクエストの同時並行実行は、ライブラリの重要な機能です。 サイトのページが5つの削除されたブロックから組み立てられ、各ブロックが100ミリ秒で生成される場合、それらを並行して実行して、ページ全体を500ミリ秒ではなく同じ100ミリ秒で取得できます。
- 通信できない場合は再接続してください。 残念ながら、世界は不完全であり、偶発的なパケット損失により、SOAPサーバーへの最初の接続試行がタイムアウトになる可能性があります。 これは、プロジェクトが複数のデータセンターにある場合に特に一般的です。 Dklab_SoapClientを使用すると、接続が開かれたときのタイムアウト(1秒など)を設定し、失敗した場合に指定された回数だけ再試行できます。 実際には、これにより、最終的な失敗の可能性が1,000倍減少します。 再接続は、ほとんど常にパケット損失に役立ちます。
- データを受信するためのタイムアウトのサポート。 ページが削除されたブロックから組み立てられている場合、ブロックの1つが「フリーズ」した場合、ページ全体も「フリーズ」します。 同時に、残りが存在するときにブロックの1つが存在しないことはそれほど大きな問題ではありません。 Dklab_SoapClientがリモートプロシージャからの応答を待つ時間を指定できます。 時間を超過すると、PHP例外が発生します。これは、残りのブロックのロードを中断することなく、必要に応じて処理できます。
クラスMyServer { パブリック関数getComplexData($ some) { 睡眠(1); //入力し、重いコードをエミュレートします return array( "obj" =>(オブジェクト)array( "prop" => $ some)、 "some" => "thing"); } } $ soapServer = new SoapServer(null、array( 'uri' => 'urn:myschema')); $ soapServer-> setObject(新しいMyServer()); $ soapServer->ハンドル();
対応するSOAPクライアントは次のようになります。
require_once "Dklab / SoapClient.php"; $ client = new Dklab_SoapClient(null、array( 'location' => "http://example.com/server.php"、 'uri' => 'urn:myschema'、 'timeout' => 3 )); //リクエストは並列に非同期で実行されます。 合計で-1秒間。 $ query1 = $ client-> async-> getComplexData(array( "abc")); $ query2 = $ client-> async-> getComplexData(array( "xyz")); print_r($ query1-> getResult()); print_r($ query2-> getResult());
重要なことは、PHPでSOAPを使用する場合、サーバーは任意の形式(オブジェクト配列の配列など)でデータを返すことができ、クライアントはパラメーター内の任意の構造の変数をサーバーに渡すことができる(オブジェクト配列の同じ配列など)。 この場合、すべての変換は自動的に実行されます。
なぜなら Dklab_SoapClientは組み込みのSoapClientの拡張機能であり、後者のすべての標準機能がサポートされています。
- Cookieを使用します。 1つのプロシージャはsetcookie()を呼び出し、別のプロシージャは後でこのcooikeの値を読み取ることができます。
- PHPセッションを操作します。 1つのプロシージャはセッションにデータを書き込み、2番目のプロシージャは読み取りを行います。
- WSDLスキームと複雑なビジネスオブジェクトの転送のサポート。
- リモートプロシージャで発生する例外の処理。
ドキュメント、サンプル、自動テストを表示して、ライブラリをダウンロードしてください: http : //dklab.ru/lib/Dklab_SoapClient/
PS
ところで、開発ではGitとソーシャルネットワークGitHubを使用しています 。 他の人は試していないので、これを行うことをお勧めします。