Выбирая Websocket в качестве технологии реального времени, лежащей в основе веб-приложения для моей компании, я пытаюсь определить, какой будет рабочая нагрузка на сервер.
Насколько я понимаю внутреннее устройство Apache, я считаю, что процесс или поток Apache будет поддерживаться в течение всего сеанса Websocket, проксируя соединение с помощью mod_proxy_wstunnel; Будет ли этот же процесс обрабатывать и традиционные клиентские HTTP-запросы? Или другой процесс будет «потрачен впустую», отвечая на эти запросы по мере их поступления?
Все зависит от того, как разработано ваше веб-приложение. Вы действительно можете передавать «традиционные HTTP-запросы» через установленный веб-узел ... или можете обрабатывать запрос более традиционным методом. К сожалению (с точки зрения системного инженера) разработчики ленивы ... и редко прикладывают усилия, необходимые для передачи основной части трафика через установленный веб-узел. Чаще он используется для объявления «обновлений» различных битов на странице ... и работы по извлечению данных изображения и всего остального, оставленного на усмотрение более типичных GET и POST.
Короче ... да ... вы свяжете 1 процесс за время жизни каждого веб-сокета ... и 1 соединение для каждого запроса. Тем не менее, вы можете использовать поддерживающие соединения для повторного использования одного и того же соединения снова и снова ... но это может повлиять на общее время загрузки страницы, так как вы должны ждать, пока каждый элемент будет отправлен последовательно, а не параллельно.
Именно здесь резина встречается с дорогой, когда дело доходит до Apache. Вы можете изменить модуль многопроцессорности (MPM), чтобы изменить способ обработки этих поддерживающих соединений ... а также многое другое для настройки общей производительности.
Несмотря на всю тонкую настройку, которую вы можете сделать с Apache ... иногда это не идеальный инструмент для работы. Apache - это швейцарский армейский нож в ящике для инструментов. Он разработан как самый динамичный инструмент в наборе инструментов. Nginx более оптимизирован и не включает в себя пинцет или ножницы, которые вы найдете в apache-knife ... а nodejs - это просто нож для масла. Иногда (когда позволяет окружающая среда) лучше смешивать и сочетать, чтобы получить все преимущества.