2016-04-20 4 views
0

Как я могу вызвать методы асинхронно в symfony2.7 Like.Асинхронные вызовы в symfony2

Мне нужно получить данные, создающие 4 разных соединения API. Проблема заключается в медленном ответе от моего приложения, поскольку PHP является синхронным, поэтому он должен ждать ответа от всего API, а затем отображать данные.

class MainController{ 

    public function IndexAction(){ 
    // make Asynchronous Calls to GetFirstAPIData(), GetSecondAPIData(), GetThridAPIData() 
    } 
    public function GetFirstAPIData(){ 
    // Get data 
    } 

    public function GetSecondAPIData(){ 
    // Get data 
    } 

    public function GetThridAPIData(){ 
    // Get data 
    } 
} 
+0

Вы могли бы заглянуть в: http://php.net/manual/en/function.proc-open.php – Marcus

+0

вы видите реакцию ?, см. Http://reactphp.org/ – ghanbari

ответ

2

Вы можете использовать guzzle для этого, особенно когда мы говорим о HTTP APIs основе. Жрать является веб-клиент, который имеет асинхронные вызовы, построенные в

код будет выглядеть примерно так:. (Взят из docs)

$client = new Client(['base_uri' => 'http://httpbin.org/']); 

// Initiate each request but do not block 
$promises = [ 
    'image' => $client->getAsync('/image'), 
    'png' => $client->getAsync('/image/png'), 
    'jpeg' => $client->getAsync('/image/jpeg'), 
    'webp' => $client->getAsync('/image/webp') 
]; 

// Wait on all of the requests to complete. Throws a ConnectException 
// if any of the requests fail 
$results = Promise\unwrap($promises); 

// Wait for the requests to complete, even if some of them fail 
$results = Promise\settle($promises)->wait(); 

// You can access each result using the key provided to the unwrap 
// function. 
echo $results['image']->getHeader('Content-Length'); 
echo $results['png']->getHeader('Content-Length'); 

В этом примере все 4 запроса выполняется параллельно. Примечание. Только IO не выполняет обработку результатов. Но это, вероятно, то, что вы хотите.

Смежные вопросы