Какое практическое / жесткое ограничение на количество соединений сокетов на сервер - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть ряд клиентских устройств, которые открывают сокет-соединение, предоставляемое службой, работающей на сервере Windows 2008 R2. Мне интересно, что является жестким ограничением на количество одновременных клиентских подключений.

Ответы [ 2 ]

6 голосов
/ 09 декабря 2010

Согласно этой статье , одним жестким ограничением является (было) 16 777 214. Практическое ограничение также зависит от вашего приложения: например, если вы создаете поток для соединения, то практическое ограничение исходит из ограничения количества потоков больше, чем из сетевого стека. Существует также ограничение на количество дескрипторов, которые может иметь любой процесс, и т. Д.

3 голосов
/ 09 декабря 2010

Если вы выберете разумную архитектуру для своего сервера, тогда предел будет связан с памятью и процессором.ИМХО, вы никогда не достигнете жесткого предела, который Мартин упоминает:)

Так что вместо того, чтобы беспокоиться о теоретическом пределе, которого вы никогда не достигнете, вы должны, ИМХО, подумать о том, как вы будете разрабатывать свое приложение икак вы будете тестировать его, чтобы определить текущее максимальное количество клиентских подключений, которое вы можете поддерживать для вашего приложения на данном оборудовании.Для меня важно, чтобы вы запустили ваши тесты перфорации с 0-го дня (см. здесь для публикации в блоге, где я объясняю это).Современные операционные системы и аппаратное обеспечение позволяют создавать очень масштабируемые системы, но простые повседневные ошибки в кодировании и проектировании могут легко расточить эту масштабируемость, поэтому вы просто ДОЛЖНЫ постоянно выполнять тесты производительности, чтобы знать, когда вы строите препятствия для своегоспектакль.Вы просто не можете вернуться и исправить подобные ошибки в конце проекта.

Кроме того, я провел несколько тестов на Windows 2003 Server с ВМ с низкой спецификацией и легко выполнил более 70 000 одновременных и активныхсоединения с простым сервером на основе перекрывающегося проекта ввода-вывода (порта завершения ввода-вывода).См. этот ответ для более подробной информации.

Мой личный подход состоит в том, чтобы быстро собрать оболочку сервера, используя любую технологию, которую вы выберете (я предпочитаю неуправляемый C ++ с использованием портов завершения ввода-вывода и минимальных потоков), см. это сообщение в блоге для более подробной информации.Затем создайте клиент или серию клиентов, которые могут провести стресс-тестирование приложения и продолжать обновлять и запускать тестовые клиенты по мере реализации логики вашего сервера.Вы ожидаете увидеть постепенно уменьшающуюся кривую максимального числа одновременных клиентов по мере того, как вы будете увеличивать сложность своего сервера;Значительное снижение масштабируемости должно привести к тому, что вы будете проверять последние проверки, чтобы найти неудачные дизайнерские решения.

...