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