SoapClient:同時非同期リクエスト、再接続、タイムアウト処理

Dklab_SoapClientは、標準のPHPクラスSoapClientの拡張バージョンであり、負荷の高いプロジェクトでの並列(非同期)リモートプロシージャコール用に設計されています。



このライブラリを使用すると、たとえば、コンストラクタからのように、ブロックからサイトのページを構築できます。 すべての要求は並行して発生しますが、各ブロックは、SOAPを介して個別に要求されます。 ブログの1つが割り当てられた時間(タイムアウト)を満たさなかった場合、ページに表示されない場合があります。



組み込みのPHP SoapClientと比較して、追加機能がサポートされています。 なぜSOAPなのか? 一見すると、これは非常に面倒なプロトコルであり、適用が難しいように思われるかもしれません。 ただし、プロトコルの内部を詳しく調べなければ、PHP SOAPを使用するのが非常に便利であることがわかります。 WSDLスキームが不要な場合、最も単純なSOAPサーバーは次のように記述されます。



クラス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の拡張機能であり、後者のすべての標準機能がサポートされています。 プロジェクトのApache Thriftが突然「スズメの銃の外」になった場合、Dklab_SoapClientはシンプルでコンパクトな代替手段として役立ちます。 (ところで、ThriftのPHPモジュールでは並列リクエストはサポートされていません-少なくともそこでは見つかりませんでした。)



ドキュメント、サンプル、自動テストを表示して、ライブラリをダウンロードしてください: http : //dklab.ru/lib/Dklab_SoapClient/



PS

ところで、開発ではGitとソーシャルネットワークGitHubを使用しています 。 他の人は試していないので、これを行うことをお勧めします。



All Articles