Сколько возможных сокетных соединений?

Вы также можете использовать vector :: insert .

std::vector v;
int a[5] = {2, 5, 8, 11, 14};

v.insert(v.end(), a, a+5);

Изменить:

Конечно, в реальном программировании вы должны использовать:

v.insert(v.end(), a, a+(sizeof(a)/sizeof(a[0])));  // C++03
v.insert(v.end(), std::begin(a), std::end(a));     // C++11

72
задан TheHippo 17 March 2009 в 11:46
поделиться

6 ответов

Google вокруг для проблемы "C10K". Это - в основном обсуждение и технология вокруг управления 10,000 или больше одновременных подключений.

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

-9
ответ дан Darron 8 October 2019 в 10:01
поделиться

На Linux необходимо смотреть на использование epoll для асинхронного ввода-вывода. Могло бы также стоить подстроить буферы сокета для не траты слишком большого количества пространства ядра для каждого подключения.

я предположил бы, что необходимо быть в состоянии достигнуть 100k соединений на разумной машине.

5
ответ дан cmeerw 8 October 2019 в 10:01
поделиться

Это зависит не только от рассматриваемой операционной системы, но также и от конфигурации, конфигурации потенциально в реальном времени.

Для Linux:

cat /proc/sys/fs/file-max

покажет, что текущее максимальное количество общего количества дескрипторов файлов позволило быть открытым одновременно. Выезд http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html

22
ответ дан Eddie 8 October 2019 в 10:01
поделиться

Реалистично для приложения, более тогда 4000-5000 открытых сокетов на единственной машине становятся непрактичными. Просто проверка действие по всем сокетам и управление ими начинают становиться проблемой производительности - особенно в режиме реального времени среды.

-9
ответ дан sean riley 8 October 2019 в 10:01
поделиться

Какая операционная система?

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

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

Кроме того, ну, в общем, необходимо будет представить, но мне удалось надеть больше чем 70 000 параллельных соединений скромно указанный (память 760 МБ) сервер; посмотрите здесь http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html для получения дополнительной информации.

, Очевидно, если Вы используете менее эффективную архитектуру, такую как 'поток для каждого подключения' или 'выбираете' тогда, необходимо ожидать достигать менее впечатляющих чисел; но по моему скромному мнению, нет просто никакой причины выбрать такую архитектуру для серверов сокета окон.

Редактирование: посмотрите здесь http://blogs.technet.com/markrussinovich/archive/2009/03/26/3211216.aspx ; способ, которым вычисляется количество пула неподкачиваемой памяти, изменил в Vista и Сервере 2008, и там теперь намного более доступно.

1
ответ дан Len Holgate 8 October 2019 в 10:01
поделиться

10,000? 70 000? вот и все :)

FreeBSD, вероятно, тот сервер, который вам нужен. Вот небольшая запись в блоге о настройке его на обработку 100 000 соединений, в нем уже некоторое время есть некоторые интересные особенности, такие как сокеты с нулевым копированием , вместе с kqueue, чтобы действовать как механизм порта завершения.

Solaris может обрабатывать 100 000 соединений еще в прошлом веке !. Говорят, что linux будет лучше

Лучшее описание, с которым я столкнулся, - это презентация / статья о написании масштабируемого веб-сервера. Он не боится сказать это так, как есть :)

То же самое и с программным обеспечением: кретины на прикладной уровень принудительно велик инновации на уровне ОС. Так как Lotus Notes поддерживает одно TCP-соединение на каждого открытого клиента IBM внесла значительную оптимизации для одного процесса, 100 000 открытых подключений »к Linux

. Планировщик O (1) изначально был созданы, чтобы хорошо забивать нерелевантный тест Java. Дно линия состоит в том, что это раздувание приносит пользу всем us.

8
ответ дан 24 November 2019 в 12:42
поделиться
Другие вопросы по тегам:

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