Библиотека @ stil такая классная. Большое ему спасибо!
Тем не менее, я написал замечательную служебную функцию, которая позволяет очень легко получать асинхронный контент с нескольких URL-адресов (в моем случае это API-интерфейсы) и возвращать их без потери информации, которая есть какая.
Вы просто запускаете его, передавая ключ => значение массив в качестве входных данных, и он возвращает ключ => ответ массив в качестве результата: -)
/**
* This function runs multiple GET requests parallely.<br />
* @param array $urlsArray needs to be in format:<br />
* <i>array(<br />
* [url_unique_id_1] => [url_for_request_1],<br />
* [url_unique_id_2] => [url_for_request_2],<br />
* [url_unique_id_3] => [url_for_request_3]<br />
* )</i><br />
* e.g. input like:<br />
* <i>array(<br />
* "myemail@gmail.com" =>
* "http://someapi.com/results?search=easylife",<br />
* "michael@gmail.com" =>
* "http://someapi.com/results?search=safelife"<br />
* )</i>
* @return array An array where for every <i>url_unique_id</i> response to this request
* is returned e.g.<br />
* <i>array(<br />
* "myemail@gmail.com" => <br />
* "Work less, enjoy more",<br />
* "michael@gmail.com" => <br />
* "Study, work, pay taxes"<br />
* )</i>
* */
public function getResponsesFromUrlsAsynchronously(array $urlsArray, $timeout = 8) {
$queue = new \cURL\RequestsQueue;
// Set default options for all requests in queue
$queue->getDefaultOptions()
->set(CURLOPT_TIMEOUT, $timeout)
->set(CURLOPT_RETURNTRANSFER, true);
// =========================================================================
// Define some extra variables to be used in callback
global $requestUidToUserUrlIdentifiers;
$requestUidToUserUrlIdentifiers = array();
global $userIdentifiersToResponses;
$userIdentifiersToResponses = array();
// =========================================================================
// Set function to be executed when request will be completed
$queue->addListener('complete', function (\cURL\Event $event) {
// Define user identifier for this url
global $requestUidToUserUrlIdentifiers;
$requestId = $event->request->getUID();
$userIdentifier = $requestUidToUserUrlIdentifiers[$requestId];
// =========================================================================
$response = $event->response;
$json = $response->getContent(); // Returns content of response
$apiResponseAsArray = json_decode($json, true);
$apiResponseAsArray = $apiResponseAsArray['jobs'];
// =========================================================================
// Store this response in proper structure
global $userIdentifiersToResponses;
$userIdentifiersToResponses[$userIdentifier] = $apiResponseAsArray;
});
// =========================================================================
// Add all request to queue
foreach ($urlsArray as $userUrlIdentifier => $url) {
$request = new \cURL\Request($url);
$requestUidToUserUrlIdentifiers[$request->getUID()] = $userUrlIdentifier;
$queue->attach($request);
}
// =========================================================================
// Execute queue
$queue->send();
// =========================================================================
return $userIdentifiersToResponses;
}