Symfony 3 및 ReactPHP 라이브러리를 사용하여 모든 기능을 제어하고 동일한 함수 (subFunction()
코드) 비동기 적으로을 여러 번 호출해야합니다. 나는이 개 프로젝트 (프로젝트 1 및 프로젝트 2)가 :PHP에서 여러 함수 호출을 비동기 적으로 호출
프로젝트 1 코드 :
/**
* Loop an array of urls and call sub function.
**/
public function startFunction() {
$finalResponse = [];
$urls = ['www.google.es', 'www.github.com', 'www.bitbucket.org'];
foreach ($urls as $url) {
$res = $this->subFunction($url); // subfunction call (**IT MAY TAKE A LONG TIME !!**)
$finalResponse[] = $res;
}
return $finalResponse;
}
/**
* Uses Factory loop to get the Promise returned by finalRequest function.
**/
private function subFunction($url) {
$loop = \React\EventLoop\Factory::create();
$classA = new Project2\ClassA();
$finalResponse = null;
// project 2 function call
$classA->finalRequest($url)->then(function($response) use(
&$finalResponse
) {
$finalResponse = $response;
})
return $finalResponse;
}
프로젝트 코드 2 :
classA {
/**
* Makes an React\HttpClient request (GET) to sent url and return his value inside a Promise.
**/
public function finalRequest($url) {
$generalDeferred = new Deferred();
$generalPromise = $generalDeferred->promise();
// make React\HttpClient request
$request = $client->request('GET', $url);
$request->on('response', function ($response) use($generalDeferred) {
$response->on('data', function ($response) {
$generalDeferred->resolve($response);
});
});
$request->end();
return $generalPromise;
}
}
문제가 있음을 모든 subFunction($url)
통화는 프로그램은 하위 함수가 응답을받을 때까지 멈추지 만,이 하위 함수는 많은 시간이 걸릴 수 있기 때문에 비동기 적으로이 작업을 수행해야합니다. 그래서 모든 subFunction($url)
호출을 동시에 시작하고 모든 응답을 비동기 적으로 가져오고 싶습니다.
이 문제를 해결할 수 있습니까? 감사.
작동 했습니까? 아무것도 분명히하기 위해 나를 필요로하니? – albert
마침내 내 'startFunction()'main 함수에서'$ loop-> run()'을 사용하고'subFunction()'에서 ReactPHP Promises를 반환하여 문제를 해결했다. 그러나, 나는 Guzzle Async ..를 사용하기 위해 코드를 다시 작성하려고 노력할 것이다. Thankss¡ – Wildchild