2016-05-04 8 views
0

Итак, я подключаюсь к API https://genderize.io/. Я хочу как можно быстрее очистить этот API, потому что мне может потребоваться выполнить 1 000 000 поисковых запросов за раз. Возможно ли прикрепить 100 000 (10 имен на запрос) разных заголовков curl_init с разными параметрами, а затем выполнить их все параллельно? Кажется слишком хорошим, чтобы быть правдой, если бы я мог. Также, если я не могу этого сделать, как еще можно ускорить запросы. В моем текущем коде используется один экземпляр curl_init и изменение URL для каждого цикла в цикле for. Вот мой текущий цикл:Могу ли я использовать curl_multi_init на одном и том же api с разными параметрами?

$ch3 = curl_init(); 
for($x = 0; $x < $loopnumber; $x = $x + 10){ 
    $test3 = curl_setopt_array($ch3, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => 'https://api.genderize.io?name[0]=' . $firstnames[$x] . '&name[1]=' . $firstnames[$x+1] . '&name[2]=' . $firstnames[$x+2] . '&name[3]=' . $firstnames[$x+3] . '&name[4]=' . $firstnames[$x+4] . '&name[5]=' . $firstnames[$x+5] . '&name[6]=' . $firstnames[$x+6] . '&name[7]=' . $firstnames[$x+7] . '&name[8]=' . $firstnames[$x+8] . '&name[9]=' . $firstnames[$x+9] 
    )); 
    $resp3 = curl_exec($ch3); 
    echo $resp3; 
    $genderresponse = json_decode($resp3,true); 
+2

«API является бесплатным, но ограничен 1000 именами в день». «API ограничен максимум 10 именами на запрос» –

+0

'curl_multi_ *' может помочь, но я предполагаю, что реальным узким местом будет с API. Если вы нажмете на них сотни тысяч звонков одновременно, это может не сэкономить вам много времени. Тебе придется самому проверить это. – WillardSolutions

+0

@ Dagon Я вижу, что я собираюсь заплатить за услугу и получить более 1000 имен в день. Мне было интересно, запрошу ли я параллельно, если каждый запрос может иметь 10 имен и может быть разрешен к выполнению в одно и то же время. – EdTheSped

ответ

0

TL; DR

Да, это возможно - в теории. Но нет, это не сработает на практике. Вам лучше оставаться в нескольких сотнях параллельных соединений.

Чем длиннее история

Вы, вероятно, бежать из розетки и, возможно, памяти, прежде чем вы можете создать один миллион простых ручек и добавить их к Libcurl мульти ручкой.

Если вы намерены связываться с одним и тем же удаленным IP-адресом и номером порта, и у вас есть только один локальный IP-адрес, и поскольку каждому соединению нужен свой собственный номер локального порта, вы не можете параллельно использовать теоретические соединения размером 64 КБ. Вы даже не дойдете до 64K в большинстве стандартных операционных систем, настроенных по умолчанию. (Вы можете сделать больше, если разговариваете с более удаленными IP-адресами или имеете больше локальных IP-адресов для привязки соединений.)

Для этого аргумента, если мы предположим, что вы действительно получаете до 60K одновременных подключений, узнаем, что curl_multi_ * API получает скорость обхода с таким количеством подключений, что и выборка/опрос. В libcurl есть API, основанный на событиях, который рекомендуется, когда вы выходите за пределы, возможно, нескольких сотен параллельных соединений, но изнутри PHP у вас нет доступа к нему или его использования.

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

  • Нет связанных вопросов^_^