Сколько запросов может обработать порт за один раз - PullRequest
5 голосов
/ 29 февраля 2012

Я создаю веб-приложение, имеющее страницу входа, на которой число пользователей может одновременно попытаться войти. поэтому здесь мне нужно обрабатывать количество запросов одновременно.

Я знаю, что это уже реализовано для ряда популярных сайтов, таких как G talk.

Итак, у меня есть несколько вопросов.

"Сколько запросов может обрабатывать порт одновременно?"

Сколько сокетов я могу (сервер) создать? есть ли ограничения?

Например, Как мы знаем, когда мы реализуем взаимодействие клиент-сервер с использованием программирования сокетов (TCP), мы передаем «номер порта (незарезервированный номер порта) серверу для создания сокета.

Так что я хочу сказать, что если 100000 запросов пришло за один раз, то каков будет подход порта ко всем этим запросам.

Он обслуживает какую-то очередь для всех этих запросов, или он просто принимает количество запросов в соответствии с его лимитом? если да, что такое ограничение размера порта для запроса?

Резюме: Я хочу знать, как сервер обслуживает несколько запросов одновременно? Я ничего не знаю об этом. Я знаю, что мы подключаемся к серверу через его IP-адрес и номер порта, вот и все. Поэтому я подумал, что есть только один порт, и многие запросы поступают на этот порт только через разных клиентов, так как сервер управляет всеми запросами?

Это все, что я хочу знать. Если вы объясните эту концепцию подробно, это будет очень полезно. Спасибо, в любом случае.

Ответы [ 4 ]

3 голосов
/ 29 февраля 2012

Порт не обрабатывает запросы, он принимает пакеты.В зависимости от реализации сервера эти пакеты могут обрабатываться одним или несколькими процессами / потоками, поэтому теоретически это не ограничено.Но вы всегда будете ограничены пропускной способностью и производительностью.

Если множество пакетов поступает на один порт и не может быть обработано своевременно, они будут буферизованы (сервером, операционной системой или оборудованием),Если эти буферы заполнены, перегрузка может обрабатываться сетевыми компонентами (маршрутизаторами, коммутаторами) и протоколами, на которых основан сетевой трафик.Например, в TCP есть несколько методов, позволяющих избежать или контролировать перегрузку: http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Congestion_control

1 голос
/ 29 февраля 2012

Тогда вы, вероятно, будете ограничены количеством дескрипторов файлов, которые поддерживает ваша ОС (в случае * nix), или количеством одновременных подключений, поддерживаемых вашим веб-сервером. Максимум ОС на моей машине, кажется, 75000.

1 голос
/ 29 февраля 2012

Обычно это настраивается на используемом вами приложении / веб-сервере. Ограничение количества одновременных запросов ограничивается количеством параллельных рабочих потоков, которые вы разрешаете серверу порождать для обслуживания запросов. Если поступит больше запросов, чем имеется доступных потоков для их обработки, они начнут стоять в очереди. Это вторая вещь, которую вы обычно настраиваете, размер журнала ожидания сокета. Когда бэк-журнал заполнен, сервер начинает отвечать «отказано в соединении» при поступлении новых запросов.

0 голосов
/ 29 февраля 2012

100 000 одновременных подключений должно быть легко возможно в Java, если вы используете что-то вроде Netty .

Вы должны уметь:

  • Принимайте входящие соединения достаточно быстро. Здесь очень помогает NIO Framework , который Netty использует для внутреннего использования. Существует небольшая очередь для входящих запросов, поэтому вам нужно иметь возможность обрабатывать их быстрее, чем очередь может заполниться.
  • Создание соединений для каждого клиента (это подразумевает некоторые накладные расходы памяти для таких вещей, как информация о соединении, буферы и т. Д.) - вам может потребоваться настроить параметры виртуальной машины, чтобы иметь достаточно свободной памяти для всех соединений

См. Эту статью за 2009 год , в которой обсуждается достижение 100 000 одновременных подключений с использованием ЦП около 20% на четырехъядерном сервере.

...