|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Пытаюсь сделать простенький HTTP сервер с использованием библиотеки httplib . Смущает скорость обмена: если "всё по умолчанию", то примерно один запрос GET в одну-две секунды. Если клиент включает keep-alive, то скорость возрастает до 2 запросов в секунду. Что также удручает. Опыта написания http клиентов и серверов нет, может, это нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:13 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Клиент посылает GET - запросы вида /id=число, например: Код: plaintext 1.
Сервер возвращает ответы вида Код: plaintext 1.
. Код сервера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:16 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Извинения, код сервера чуть подправлен: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код клиента: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:35 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
может там еще какие таймауты влияют c set_keep_alive(true) конечно будет быстрее, сейчас в броузерах это по дефолту имхо set_keep_alive_max_count выставь (черт знает сколько, 5-10 допустим) надо все Сеттеры смотреть, что они делают ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:52 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Alex_Ustinov, да. Увеличение set_keep_alive_max_count увеличивает скорость. Запросто можно и 500 (и выше) сообщений в секунду получить. Но - вот беда: первое сообщение хоть убей 2 секунды. Т.е., время коннекта. Т.обр., нужно учесть характер данных и алгоритм обмена. Огромное спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 20:34 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъ Т.е., время коннекта. Радует, что "тормоза" - на стороне клиента. Т.е., праллельные коннекты сервер почти не замедляют. Спасибо ещё раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 20:38 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъСмущает скорость обмена: если "всё по умолчанию", то примерно один запрос GET в одну-две секунды. Кто клиент и какой протокол? Если браузер без явного указания префикса протокола, то он пробует щемиться по https сначала и только если не вышло - переключается на http. А если у тебя https, то там безумный handshake с проверкой сертификатов и обращением к 100500 центрам сертификации перед началом собственно обмена. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:06 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, клиент - тоже я (см. код 22306718 ). :) Протокол HTTP 1.1, не использую никаких SSL/TLS. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:21 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъ, используй пул из нескольких соединений. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:25 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
mayton ъъъъъ, используй пул из нескольких соединений. Э... клиент должен быть с сервером постоянно на связи? Если да, то, наверное, никак. Да и не особо нужно. Задержка при коннекте на стороне клиента не особо важна. Я сперва подумал, что это сервер тормозит, сие было бы грустно: например, с утра десятки тысяч клиентов лезут к серверу, это скорее сдохнешь, чем результат получишь... А так - нормально, торможение в момент коннекта фактически только на клиенте. Результаты удовлетворительны, если что - буду копать глубже. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:34 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
А в чем проблема? Пул объектов - нормальный порождающий шаблон проектирования. Он тут как раз подходит. Можно его наделить логикой idle_timeout когда созданные соединения после часа простоя - отключаются. Тогда не нужна постоянная связь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 23:14 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
mayton А в чем проблема? Да по логике не нужно. Предполагается, что при старте любого "бизнес-приложения" нашего программного комплекса будет стартовать крошечное приложение - этот самый http-клиент, проверяющий наличие обновлений. Приложение будет работать параллельно (проверка наличия обновлений и, если нужно, загрузка), даже когда "бизнес-приложение" завершит работу. То есть, если потратится лишние 2 сек на первоначальный коннект - это вовсе не беда. И даже если связи не будет совсем - тоже не беда, потом скачают, или курьера (как сейчас) пошлют. Я боялся, что затык сервера будет, так как таких клиентов довольно много. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 23:24 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъклиент - тоже я (см. код 22306718 Протокол HTTP 1.1, не использую никаких SSL/TLS. Тогда хрень какая-то. Ответ должен приходить со скоростью пинга. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 00:20 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ъъъъъклиент - тоже я (см. код 22306718 Протокол HTTP 1.1, не использую никаких SSL/TLS. Тогда хрень какая-то. Ответ должен приходить со скоростью пинга. Да. Если на сервере вместо Код: plaintext 1.
задать Код: plaintext 1.
или сетевое имя компьютера - то всё очень-очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 02:39 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
В общем, это я тормоз. Клиент должен коннектиться не localhost, а к 127.0.0.1, тогда не будет задержки при коннекте. Или серверу следует указывать привязку не к "0.0.0.0", а к "::". Тогда пофиг, что клиент будет указывать при коннекте - localhost, 127.0.0.1 или сетевое имя компьютера. Что-то связано с ipv4/ipv6, завтра разберусь. Спать пошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 04:06 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
это виноват "местный" dns, разрешение имен, частая сетевая проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 09:10 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Не DNS, а hosts в данном случае. Он ресольвит localhost в два адреса - IPv6 и IРv4. По умолчанию IPv6 имеет приоритет и клиент пытается использовать его. Кривая библиотека: достаточно умная чтобы использовать IPv6, но недостаточно умная для коннекта сразу на все полученные адреса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 12:32 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
hosts и есть "местный" локальный ДНС ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 13:07 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Сокет (клиентский и серверный) создается в https://github.com/yhirose/cpp-httplib/blob/master/httplib.h#L2061 В клиенте функция getaddrinfo() (коннект к "localhost") возвращает список addrinfo структур, в которых addrinfo с протоколом ipv6 идут первыми, а затем иду ipv4. А в сервере (бинд к "0.0.0.0") формируется список только из addrinfo с ipv4. Таким образом, клиент создает сокет ipv6, который лезет к серверу ipv4, обламывается через 2 секунды, берет следующий addrinfo с ipv4, получает правильный коннект. Если сервер биндится в "::", то в итоге он будет "висеть" на сокете ipv6 (все та же getaddrinfo()). ... Если в https://github.com/yhirose/cpp-httplib/blob/master/httplib.h#L2069 задать хинт, вместо Код: plaintext 1.
задать, например, Код: plaintext 1.
то и клиент и сервер будет работать по ipv4. Или в настройках ОС клиента изменить порядок приоритета, задав ipv4 более приоритетным: В HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters создать/задать переменную DisabledComponents со значением 20 (hex). Подробности: https://docs.microsoft.com/en-US/troubleshoot/windows-server/networking/configure-ipv6-in-windows. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 14:59 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъ, Угу. Большинство ПО прописывают что вырубать ipv6 и не парятся по этому поводу. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:13 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, MSDNInternet Protocol version 6 (IPv6) is a mandatory part of Windows Vista and Windows Server 2008 and newer versions. We do not recommend that you disable IPv6 or its components. If you do, some Windows components may not function. We recommend using Prefer IPv4 over IPv6 in prefix policies instead of disabling IPV6. Кто я такой, чтобы идти против MS-Soft. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:17 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъклиент создает сокет ipv6, который лезет к серверу ipv4, обламывается через 2 секунды, берет следующий addrinfo с ipv4, получает правильный коннект. Вот именно поэтому правильные клиенты создают сокеты сразу для всех полученных addrinfo, коннектятся в неблокирующем режиме и используют тот сокет, который сумел успешно подключиться раньше остальных. Остальные можно либо пристрелить, либо отправить в пул для последующего повторного использования. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:21 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ъъъъъклиент создает сокет ipv6, который лезет к серверу ipv4, обламывается через 2 секунды, берет следующий addrinfo с ipv4, получает правильный коннект. Вот именно поэтому правильные клиенты создают сокеты сразу для всех полученных addrinfo, коннектятся в неблокирующем режиме и используют тот сокет, который сумел успешно подключиться раньше остальных. Остальные можно либо пристрелить, либо отправить в пул для последующего повторного использования. Да, библиотека https://github.com/yhirose/cpp-httplib - "блокирующая". Ну, в плане создания клиентского сокета, думаю, можно чуток и подшаманить. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:28 |
|
httplib: скорость клиент-серверного обмена (HTTP 1.1)
|
|||
---|---|---|---|
#18+
ъъъъъДа, библиотека https://github.com/yhirose/cpp-httplib - "блокирующая". Это сугубо всё равно. Блокирующей библиотеке никто не запрещает использовать неблокирующие сокеты с select/poll/и т.п. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:33 |
|
|
start [/forum/topic.php?fid=57&msg=40061304&tid=2017229]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 369ms |
0 / 0 |