Сколько сетевых подключений может поддерживать компьютер?

StackOverflow https://stackoverflow.com/questions/78422

  •  09-06-2019
  •  | 
  •  

Вопрос

Каковы наилучшие методы или методы определения максимального количества пользователей, которые могут подключиться к серверу в любой момент времени при написании собственного сервера?

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

Кроме того, считаете ли вы, что ограничение количества сетевых подключений определенным максимальным количеством пользователей является хорошей практикой?Или серверу не следует ограничивать количество сетевых подключений и допускать снижение производительности до тех пор, пока время отклика не станет чрезвычайно высоким?

Это было полезно?

Решение

Дэн Кегель собрал здесь краткое изложение методов обработки большого количества сетевых подключений с одного сервера: http://www.kegel.com/c10k.html

Другие советы

В целом современные серверы могут обрабатывать очень большое количество одновременных подключений.Я работал над системами, имеющими более 8000 одновременно открытых сокетов TCP/IP.

Чтобы справиться с такой нагрузкой, вам понадобится высококачественный сервисный интерфейс, см. libevent или Либев.

Это хороший вопрос, и он определенно ситуативный.Какой у тебя компьютер?У вас есть четырехпроцессорный компьютер с четырехъядерным процессором Xeon, 128 ГБ оперативной памяти и возможностью подключения по оптоволоконному каналу (например, пара Dell R900, которую мы только что купили)?Или у вас p3 550 с 256 МБ ОЗУ и модемом 56К?Какую нагрузку создает каждое соединение на вашем сервере?Какой ответ приемлем?

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

Это покажет вам, сколько соединений может поддерживать ваш компьютер.

Самое замечательное в сценарии нагрузочного/модульного тестирования заключается в том, что вы можете указать ожидаемое время ответа в своих модульных тестах и ​​увеличивать нагрузку до тех пор, пока время ответа не выйдет за пределы вашего.Если у вас есть потребность в поддержке X числа пользователей с Y второго ответа, вы сможете продемонстрировать это с помощью нагрузочных тестов.

Одной из самых больших проблем в соединениях с высоким параллелизмом на самом деле являются задействованные маршрутизаторы.Маршрутизаторы, ориентированные на домашних пользователей, обычно имеют небольшую таблицу NAT, что не позволяет маршрутизатору фактически обслуживать соединения сервера.

Обязательно изучите настройку маршрутизатора/сетевой инфраструктуры.

Я думаю, вам не следует ограничивать количество соединений, которые разрешает ваш сервер - просто перехватывайте и правильно обрабатывайте любые исключения, которые могут возникнуть при принятии и закрытии соединений, и все будет в порядке.Вам следует оставить такое программирование более низкого уровня для базовых уровней ОС - таким образом вы сможете легче переносить свой сервер и т. д.

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

Различные версии Unix будут поддерживать «неограниченное» количество дескрипторов/сокетов файлов, другие имеют высокие значения, например 32768.

Типичный лимит пользователей — 8192, но обычно его можно установить выше.

Я думаю, что Windows более ограничена, но версия сервера может иметь более высокие ограничения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top