2015-03-03 2 views
0

У меня есть несколько серверов, настроенных под балансировщик нагрузки, который распределяет запросы к ним по TCP-соединению. Другими словами - если я выдаю много запросов в браузере, все они будут отправлены на один из серверов, находящихся под балансировщиком нагрузки, по мере открытия TCP-соединения.Curl TCP keepalives на mac

Однако, когда я выдаю запросы через curl, TCP-соединения, похоже, не используются повторно, а балансировщик нагрузки отправляет каждый запрос на новый сервер (циклический алгоритм).


ВОПРОСЫ:

  1. Можно ли включить TCP с CURL поддержку активности? Если так - как?
  2. Должен ли я использовать что-то из libcurl, например: http://curl.haxx.se/libcurl/c/persistant.html - как мне это сделать?
  3. Это связано с тем, что я использую mac? http://sourceforge.net/p/curl/bugs/1214/

Спасибо.


То, что я пробовал:

for i in {1..100}; do curl --keepalive --keepalive-time 50 -s -D - http:URL -o /dev/null; done 

во время цикла я запускаю это и видим, что новый порт используется каждый раз, когда:

lsof -i -n -P | grep curl 

ответ

1

Это не возможно, как вы себе. Поскольку вы создаете новый процесс завивки для каждого URL-адреса, это приведет к новому TCP-соединению, которое завершится закрытием процесса. Поэтому, даже если curl сам будет использовать TCP keep-alive, это не имеет значения, потому что оно будет активным только до тех пор, пока процесс не будет выполнен. Curl сам по себе уже будет пытаться повторно использовать одно и то же соединение для нескольких запросов, если эти запросы находятся внутри одного процесса (например, с перенаправлением).

Возможно, вам потребуется обработать несколько URL-адресов внутри одного процесса, чтобы они могли повторно использовать одно и то же TCP-соединение для нескольких запросов. Это невозможно с помощью инструмента командной строки curl, так как это может обрабатывать только один URL за прогон. Вместо этого вы должны использовать инструмент, который может обрабатывать несколько URL-адресов в рамках одного процесса.

Возможно ли включить TCP keepalives с CURL? Если так - как?

Да, это возможно, но это не поможет с вашей проблемой.

Должен ли я использовать что-то из libcurl, например: http://curl.haxx.se/libcurl/c/persistant.html - как мне это сделать?

Да, это может помочь, потому что вы можете сделать несколько запросов таким образом из одного и того же процесса. Привязки доступны для разных языков программирования. Вы также можете использовать собственную и удобную HTTP-обработку различных языков сценариев, таких как python, perl, ruby ​​...

Это связано с тем, что я использую mac?http://sourceforge.net/p/curl/bugs/1214/

Нет, так как проблема сама по себе не может быть решена с помощью TCP.

+0

Спасибо за подтверждение! –

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