Скорость HTTP GET метода в C ++ - PullRequest
3 голосов
/ 01 февраля 2011

Я использую определенные библиотеки в программе на C ++ для подключения и загрузки различных веб-сайтов.В основном я использовал Chillkat и Curl.Однако недавно я начал программировать свой собственный HTTP-сборщик, используя MSDN и библиотеку Winsocket2.

Я запрограммировал свое программное обеспечение на открытие сокета с типом SOCKET_STREAM и для Ipv4, а затем я установил соединение свеб-сайта и отправьте запрос GET с заголовками «Host:» и «Connection: close» на сервер.Кажется, все работает нормально, однако производительность не так, как я ожидал.Библиотека Chillkat в комплекте все еще лучше, чем моя.Несмотря на то, что я максимально оптимизировал свой.

Я заметил, что когда я отправляю запрос, некоторым серверам требуется больше времени для ответа.И как только они это делают, они отправляют все сразу.Итак, как я могу сделать запрос заголовка, который инициирует быстрый ответ?Скорость очень важна для моей программы.

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Если вы видите разницу в производительности на современном компьютере с низким уровнем громкости, наиболее вероятной проблемой является то, что вы забыли отключить алгоритм Nagle. Используйте setsockopt (), чтобы установить для TCP_NODELAY значение 1. HTTP не является Telnet.

Я бы не стал беспокоиться о явной очистке, управлении буфером или чем-то в этом роде, пока не увидишь проблему с производительностью и у тебя будет достаточно громкости, чтобы заметить. За исключением написания вашего запроса в один вызов записи.

Для скорости загрузки размер окна имеет значение. Вы можете настроить SO_SNDBUF и SO_RCVBUF. Имейте в виду, что значения, которые ускоряют ваши тесты, могут замедлить вашу реальную производительность.

0 голосов
/ 01 февраля 2011

Честно говоря, HTTP - сложный стандарт, и существует множество способов оптимизировать реализацию. Однако вероятность того, что у вас будет достаточно времени, чтобы оптимизировать его лучше, чем у уже упакованной библиотеки, такой как Chillkat или Curl, крайне маловероятна. Если бы вы захотели это сделать, я бы предложил уменьшить количество отправляемых вами заголовков и очистить буфер сокетов (в обход алгоритма Nagle) после записи строки состояния в сокет. Это даст правильно закодированному серверу немного больше времени (несколько мс) для ответа на ваш запрос. Но даже это может взорваться, если ваша сетевая конфигурация не "идеальна".

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

...