У меня есть VPS в wiredtree, где я хотел бы запустить приложение scala / lift с jeety на сервере, на котором запущен стек LAMP. Я хочу использовать кометных актеров, поэтому я буду использовать "длинный http-хак", и я не знаю, будет ли это важно.
Итак, какие у меня есть варианты? Как я могу этого добиться? Я читал, что есть способ сделать это с помощью mod_rewrite и mod_proxy, но я понятия не имею!
Все решения кометы полагаются на то, чтобы соединение между веб-сервером оставалось открытым как можно дольше, либо клиент делает POST
запрос, а затем задержка отправки данных, или сервер, отправляющий GET
ответ, снова задерживая данные.
Оба из них имеют схожие проблемы для источника, а именно использование сокета и памяти для каждого соединения и, возможно, потока, если вы не используете что-то вроде продолжения Jetty.
Если разместить обратный прокси-сервер, такой как Apache, перед Jetty, например apache, каждое открытое соединение между Jetty и клиентом также будет потреблять рабочего. В зависимости от того, какую модель рабочего Apache вы выберете (например, mod_prefork
или mod_worker_mpm
) будут ограничения на максимальное количество подключений, которое может поддерживать ваш сервер Apache. Это около пары сотен за mod_prefork
и обычно ограничивается объемом физической памяти, потребляемой каждым рабочим процессом, до нескольких тысяч с mod_worker_mpm
. Если вы смешиваете mod_worker_mpm
с php вам следует изучить варианты, с которыми была скомпилирована ваша версия php, поскольку известны несовместимости с php и mod_worker_mpm
.
Вам также следует помнить о тайм-аутах как в Apache, так и в Jetty. Соединения в стиле кометы либо имитируют медленное POST
request, поэтому вам придется настроить Apache, чтобы он был снисходительным к этому, а также к размеру тела запроса. GET
запросы стиля также подвержены тайм-ауту, если с исходного сервера ничего не передается. Вам нужно будет применить эти тайм-ауты на обеих сторонах обратного прокси-соединения, от клиента к Apache и от Apache к Jetty.
Если бы я развертывал подобное решение, я бы либо разместил службу Comet на основе Jetty в другом домене, используя балансировщик нагрузки для прокси-сервера нескольких бэкэндов Jetty для дополнительной емкости и надежности, либо я бы использовал другой обратный прокси, скажем HAProxy, для действуют вместо Apache и направляют запросы к различным серверным модулям (Apache, Jetty) на основе URL-адреса.