Назад | Перейти на главную страницу

как сервер может обрабатывать множество подключений к порту 80

По общему признанию, это простой вопрос, но 20 минут поиска в Google, и я просто не могу найти ответ ... Я сформулирую свой вопрос на примере.

скажем, у меня есть www.reallypopular.com, и мой веб-сайт обрабатывает 100 запросов GET в секунду. Также предположим, что среднее время ответа моего сервера на этот запрос GET составляет 1 секунду (для примера просто предположим некоторую обработку на стороне сервера). Насколько я понимаю, порты говорят, что первый клиент, который свяжется с моим сервером, затем заблокирует кто-либо еще от подключения к порту 80 на 1 секунду. Следуя этой логике, фактически только 1% всех пользователей получит ответ, а остальные получат сообщение «Порт занят» или «Не отвечает» или какая-то подобная ошибка.

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

Ответ можно найти в этот статья в Википедии:

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

Также из этот статья о сокетах Беркли в Википедии.

Когда приложение прослушивает потоковые соединения от других хостов, оно уведомляется о таких событиях (см. Функцию select ()) и должно инициализировать соединение с помощью функции accept (). Accept () создает новый сокет для каждого подключения и удаляет соединение из очереди на прослушивание.

Когда клиент подключается, а TCP-сервер принимает подключение, новая розетка создается на сервере для связи с этим клиентом. Исходный прослушивающий сокет продолжает прослушивать новые запросы, а новый сокет используется для отправки и получения от конкретного клиента. Обратите внимание, что TCP-сервер с N активными клиентами будет иметь N сокетов для чтения / записи для каждого клиента в дополнение к основному прослушивающему сокету. Все эти розетки N + 1 должны быть на тот же номер порта (хорошо известный номер порта сервера), но внутри кода сервера у них разные дескрипторы файлов сокетов.

Источник

TCP так не работает. Подключение к порту из другой системы не означает, что порт не может принимать другие подключения. Из статья в Википедии о TCP:

Поступающие пакеты данных TCP идентифицируются как принадлежащие определенному TCP-соединению по его сокетам, то есть по комбинации адреса хоста источника, порта источника, адреса хоста назначения и порта назначения.