Я хотел бы знать, как программа HTTP-сервера Apache обслуживает множество клиентов, подключающихся к нему через один и тот же порт 80? Я знаю про порт и сокеты. Я много раз об этом узнавал в интернете, но не мог найти ответ, который объясняет это проще всего. Многие ответы вызывают новые вопросы, как этот:

Обычно для каждого подключающегося клиента сервер разветвляет дочерний процесс, который взаимодействует с клиентом (TCP). Родительский сервер передает дочернему процессу установленный сокет, который связывается с клиентом. Когда вы отправляете данные в сокет с вашего дочернего сервера, стек TCP в ОС создает пакет, возвращающийся клиенту, и устанавливает для "from port" значение 80. Если сервер использует только один дочерний процесс для обслуживания всех сокетов, то сервер называется однопроцессным / потоковым, а если сервер использует много подпроцессов для обслуживания каждого сокета одним подпроцессом, то сервер называется мультипроцессором. сервер процессов / потоков. Обратите внимание, что независимо от типа сервера сервер может / должен всегда использовать один и тот же начальный сокет для ответа (нет необходимости выделять другой порт сервера).

Является ли HTTP-сервер Apache многопоточным или однопоточным? Я думаю, что это многопоточный.

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

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .