Curl Multi Fetch URLs одновременно

Я пытаюсь создать программу, которая может одновременно получать несколько URL-адресов. Я использую этот пример кода libcurl и libuv http://curl.haxx.se/libcurl/c/multi-uv.html

Когда я компилирую его и передаю программе несколько URL-адресов, таких как

/curl_fetch google.com yahoo.com facebook.com

он отлично работает, и я получаю результаты мгновенно. Однако, когда я передаю больше аргументов, например 100 URL-адресов, в течение нескольких минут вообще ничего не возвращается. Есть ли причина, по которой он блокируется при попытке получить несколько страниц параллельно?


person cwings    schedule 25.01.2014    source источник


Ответы (1)


Чтобы передачи были действительно параллельными, вам нужно использовать libcurl, который был создан для поддержки асинхронного разрешения имен. Он должен быть собран с помощью threaded-resolver или c-ares. Стандартный резолвер является синхронным, поэтому медленное разрешение DNS заблокирует все одновременные передачи, и если вы добавите сотни передач, есть вероятность, что некоторые из них будут иметь медленное разрешение имен...

person Daniel Stenberg    schedule 25.01.2014
comment
Я скомпилировал libcurl с помощью c-ares, но у меня все еще та же проблема. - person cwings; 27.01.2014