2017-12-19 6 views
1

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까지 걸리지 않습니다.

누군가가 도움을 줄 수 있기를 바랍니다.

답변

0

문제는 $ 클라이언트 객체가 모든 요청으로 생성 된 것이 었습니다. 컬 멀티 컬이 어떤 핸들러를 사용할 지 알 수 없게 만듭니다. https://stackoverflow.com/a/46019201/7924519을 통해 답변을 찾았습니다.

관련 문제