私はGuzzleを使用してSOAP APIを使用しています。私は6つの要求をしなければならないが、将来的にはこれは不確定な要求でもあるかもしれない。Guzzleが同期要求を送信しています
問題は非同期ではなく、同期を送信しているという問題です。それ自身のすべての要求は+ 2.5秒かかります。
私は、Guzz、$ promisesを持つ固定配列のもの、さらにはプールを使ってすべての例を試してみました(これは私が試したものです)私は最終的に必要です)。すべてを1ファイル(機能)に入れると、合計のタイミングを5-6秒に戻すことができます(これは問題ありません)。しかし、私がオブジェクトと機能のすべてを何とか入れたら、Guzzleはそれらを再び同期させることにします。
Checks.php:
public function request()
{
$promises = [];
$promises['requestOne'] = $this->requestOne();
$promises['requestTwo'] = $this->requestTwo();
$promises['requestThree'] = $this->requestThree();
// etc
// wait for all requests to complete
$results = \GuzzleHttp\Promise\settle($promises)->wait();
// Return results
return $results;
}
public function requestOne()
{
$promise = (new API\GetProposition())
->requestAsync();
return $promise;
}
// requestTwo, requestThree, etc
API \ GetProposition.php
public function requestAsync()
{
$webservice = new Webservice();
$xmlBody = '<some-xml></some-xml>';
return $webservice->requestAsync($xmlBody, 'GetProposition');
}
Webservice.php
public function requestAsync($xmlBody, $soapAction)
{
$client = new Client([
'base_uri' => 'some_url',
'timeout' => 5.0
]);
$xml = '<soapenv:Envelope>
<soapenv:Body>
'.$xmlBody.'
</soapenv:Body>
</soapenv:Envelope>';
$promise = $client->requestAsync('POST', 'NameOfService', [
'body' => $xml,
'headers' => [
'Content-Type' => 'text/xml',
'SOAPAction' => $soapAction, // SOAP Method to post to
],
]);
return $promise;
}
私が変更d XMLと省略形のいくつかのパラメータ。なぜなら、私はそのAPIのために必要なすべての準備をしている間にWebサービスクラスを持っているからです。ほとんどのAPIには、呼び出すことのできる複数のメソッド/アクションがあります。 API \ GetProposition。
->wait()
の前に、私はすべての$約束が保留中であることを見ることができます。したがって、非同期を送信しているように見えます。 ->wait()
の後、彼らはすべて達成されました。
パフォーマンスはマイナスです。 6つの要求はすべて2.5から最大3秒を要しません。
誰かが助けてくれることを願っています。
ニック