Рассмотрим следующий код:Как вы относитесь к отклоненным ответам в guzzel?
public function getItemHistoryForRegion(array $items, array $regions) {
$client = new Client(['expect' => false]);
$acceptedResponses = [];
$rejectedResponses = [];
$createdRequests = [];
$regionAndItem = [];
foreach($items as $item) {
foreach ($regions as $region) {
array_push($regionAndItem, [$item, $region]);
array_push($createdRequests, new Request('GET', 'https://public-crest.eveonline.com/market/'.$region.'/types/'.$item.'/history/'));
}
}
$pool = new Pool($client, $createdRequests, [
'concurrency' => 10,
'fulfilled' => function ($response, $index) use (&$acceptedResponses) {
EveLogHandler::requestLog($response, 'eve_online_region_item_history_responses.log');
$acceptedResponses[$index] = json_decode($response->getBody()->getContents());
},
'rejected' => function ($reason, $index) use(&$rejectedResponses) {
EveLogHandler::messageLog($reason, 'eve_online_region_item_history_rejected_responses.log');
},
]);
$promise = $pool->promise();
$promise->wait();
$historyDetails = new HistoryDetails($acceptedResponses, $regionAndItem);
$historyDetails->createHistoryDetails();
return $historyDetails->getHistoryDetails();
}
я создаю массив запросов, которые затем объединяют. Как правило, здесь поступает 10 000 запросов.
Одной из проблем является отвергнутый раздел:
'rejected' => function ($reason, $index) use(&$rejectedResponses) {
EveLogHandler::messageLog($reason, 'eve_online_region_item_history_rejected_responses.log');
},
Здесь я просто выйти отвергнутое сообщение и он возвращается как:
[2016-01-27 16:35:00] production.INFO: Message ["[object] (GuzzleHttp\\Exception\\ConnectException(code: 0): cURL error 52: Empty reply from server (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) at /home/ccccc/test_site/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:186)"] []
[2016-01-27 16:35:57] production.INFO: Message ["[object] (GuzzleHttp\\Exception\\ConnectException(code: 0): cURL error 52: Empty reply from server (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) at /home/ccccc/test_site/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:186)"] []
Theres тонну их как есть, вероятно, более 13 заданий, которые попадают в очередь, каждый из которых отправляет по 10 000 запросов каждый, поскольку вы можете видеть, что я их объединяю, поэтому я делаю 10 за раз.
Предел скорости для этого api составляет 150 запросов в секунду. Поэтому я знаю, что я не нахожусь в 150 или, по крайней мере, я не должен быть.
Вопрос, который у меня есть, заключается в том, как я могу повторить отклоненный запрос? Есть ли способ сказать, при ошибке повторите попытку max x раз? Есть ли у этого жгута встроенный?
Они используют 503, если Я ударил ограничение скорости, я делаю 18-20 параллельных подключений, которые они разрешают, я делаю 100 раз вместо 10k (я кладу 10k в 100) – TheWebs