2016-01-27 3 views
0

Рассмотрим следующий код:Как вы относитесь к отклоненным ответам в 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 раз? Есть ли у этого жгута встроенный?

ответ

1

Ошибка скручивания, которую вы получаете, может свидетельствовать о скорости сервера/прокси/брандмауэра, ограничивающей вас; особенно если ваше приложение бросает на него запросы 10k. Сама ошибка (по крайней мере, согласно libcurl указывает, что приложение не получает ответа.

Я считаю, что вы будет искать либо «повторить промежуточное программное обеспечение» или «ограничение скорости промежуточного ПО»

+0

Они используют 503, если Я ударил ограничение скорости, я делаю 18-20 параллельных подключений, которые они разрешают, я делаю 100 раз вместо 10k (я кладу 10k в 100) – TheWebs

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