При работе с мобильными клиентами очень часто возникают задержки во время передачи HTTP-запросов на несколько секунд. Если вы обслуживаете страницы или службы из предварительно настроенного Apache, дочерние процессы будут на несколько секунд привязаны к одному мобильному клиенту, даже если логика сервера приложений выполняется за 5 мс. Я ищу HTTP-сервер, балансировщик или прокси-сервер, который поддерживает следующее:
Приходит запрос к прокси. Прокси-сервер начинает буферизовать в RAM или на диске запрос, включая заголовки и тела POST / PUT. Прокси НЕ открывает соединение с внутренним сервером. Это, наверное, самая важная часть.
Прокси-сервер прекращает буферизацию запроса, когда:
- Достигнут предел размера (скажем, 4 КБ) или
- Запрос был получен полностью, заголовки и тело
Только теперь, с (частью) запросом в памяти, соединение с бэкэндом открывается, и запрос ретранслируется.
Бэкэнд отправляет ответ обратно. Снова прокси-сервер начинает немедленно буферизировать его (до более большого размера, скажем, 64 КБ.)
Поскольку прокси имеет достаточно большой буфер, ответ сервера полностью сохраняется на прокси-сервере в течение нескольких миллисекунд, и процесс / поток сервера может свободно обрабатывать больше запросов. Внутреннее соединение немедленно закрывается.
Прокси-сервер отправляет ответ мобильному клиенту, настолько быстрый или медленный, насколько это возможно, без подключения к серверу, связывающему ресурсы.
Я вполне уверен, что вы можете делать 4-6 со Squid, и nginx поддерживает 1-3 (и выглядит довольно уникальным в этом отношении). Мой вопрос: есть ли прокси-сервер, который сопрягает эти возможности буферизации и не-открытия-соединения-до-готовности? Может быть, есть немного Apache config-fu, который делает это поведение буферизации тривиальным? Кто-нибудь из них, что это не динозавр, как Squid, и который поддерживает стройную модель однопроцессного асинхронного выполнения на основе событий?
(Siderant: я бы использовал nginx, но он не поддерживает фрагментированные тела POST, что делает его бесполезным для доставки содержимого мобильным клиентам. Да, дешевые телефоны стоимостью 50 $ любят фрагментированные POST ... вздох)