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