Guzzle을 사용하여 SOAP API를 사용하고 있습니다. 나는 6 가지 요청을해야하지만, 앞으로는 이것도 불확실한 요청 일 것입니다.Guzzle이 동기식으로 요청을 전송합니다.
문제는 요청이 비동기가 아닌 동기화를 보내고 있다는 것입니다. 그것에 대한 모든 요청은 +2.5 초가 소요됩니다. 모든 6 개의 요청을 평행선 (적어도 내가 시도한 것)이라면 + 15 초가 걸립니다.
저는 Guzzle, $ promises가있는 고정 배열이있는 예제 및 풀 (예 : 그것은 결국 필요합니다). 모든 것을 1 파일 (기능)에 넣으면 총 타이밍을 5-6 초로 되돌릴 수 있습니다 (괜찮습니까?). 그러나 객체와 함수에 모든 것을 넣으면 어떻게 든 할 수있게 해줍니다.
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;
}
내가 변경 XML 및 약어에 대한 일부 매개 변수. 결국 여러 API에 대해 이야기해야하기 때문에이 구조는 다음과 같습니다. 그 사이에 webservice 클래스가있는 이유는 API에 필요한 모든 준비 작업을 수행하기 때문입니다. 대부분의 API에는 호출 할 수있는 여러 메소드/액션이 있습니다. API \ GetProposition.
->wait()
진술 이전에 나는 모든 $ 약속을 보류하고 있습니다. 그래서 비동기를 보내고있는 것처럼 보입니다. ->wait()
후에 그들은 모두 성취되었습니다.
모두 성능에서 마이너스입니다. 6 개의 요청은 모두 2.5에서 최대 3까지 걸리지 않습니다.
누군가가 도움을 줄 수 있기를 바랍니다.
닉