Максимальное количество параллельных соединений на единственном порте (сокет) Сервера

Вы всегда можете использовать переменные для хранения частей большего выражения (например, вы можете сохранить month.0|stringformat:'02d' и forloop.counter|stringformat:'02d', а затем просто заменить выражения на переменные).

24
задан Nasreddine 15 June 2016 в 21:59
поделиться

2 ответа

Это частично зависит от вашей операционной системы.

Однако нет никаких ограничений на конкретный порт. Однако существует ограничение на количество одновременных подключений, обычно ограниченное количеством дескрипторов файлов, поддерживаемых ядром (например, 2048).

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

Другим ограничением, о котором следует знать, является то, что машина может устанавливать только около 64 КБ исходящих соединений или ограничение ядра для соединений, в зависимости от того, что ниже. Это связано с тем, что порт представляет собой 16-разрядное число без знака (0-65535), и каждое исходящее соединение использует один из этих портов.

Вы можете расширить это, назначив машине дополнительные IP-адреса. Каждый IP-адрес представляет собой другое адресное пространство из 64 тыс. Адресов.

30
ответ дан cletus 28 November 2019 в 23:55
поделиться

Больше, чем ты думаешь. Или скорее.

  • Больше, чем ваш код может реально обработать (по другим причинам)
  • Больше, чем реально сделают ваши клиенты
  • Больше, чем вы можете обработать на одной коробке по причинам производительности
  • Больше, чем вам нужно на одной коробке, потому что ваши балансировщики нагрузки все равно распределят их между несколькими по причинам доступности

Я могу гарантировать, что это больше, чем все перечисленное. Существуют ограничения масштабируемости с большим количеством сокетов, которые можно обойти (Google для проблемы c10k). На практике в Linux можно иметь более 10 000 сокетов, полезно используемых одним процессом. Если у вас несколько процессов на сервер, вы можете увеличить это число еще больше.

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

Если вы запускаете сервис для многих 10-ых или 1000-ых клиентских процессов, вероятно, довольно важно, чтобы он продолжал работать, поэтому вам НАВСЕГДА потребуется несколько серверов для редуцирования. Поэтому у вас не будет проблем с развертыванием еще нескольких серверов.

5
ответ дан 28 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: