Доброго времени суток
Документация модуля socket оставила в недоумении
socket.listen(backlog)
Listen for connections made to the socket. The backlog argument specifies the maximum number of queued connections and should be at least 0; the maximum value is system-dependent (usually 5), the minimum value is forced to 0.
Т.е. 5 соединений попали в очередь, 6е получило reject ( icmp port unreachable ), так? И этот reject придётся обрабатывать на клиенте, если нужна надёжная доставка.
Но если отвлечься от питона, современные reverse proxy спокойно выдерживают десятки и сотни тысяч одновременных запросов
Как эти два факта согласуются?
- модуль socket в python'е это вам не для highload ?
- reverse proxy задирает backlog до космических значений
- backlog это время только в queue, и вызов socket.accept забирает соединение из очереди. Т.е. reverse proxy многопоточные, один поток максимально быстро выполняет accept и перекидывает задачу на другой поток, освобождая очередь
Или, ближе к задаче. Каким образом можно избежать reject'а от переполненной очереди, чтобы высокая нагрузка приводила только к разрыву по tcp connect timeout, но не icmp reject ?