Потоковая загрузка через Интернет в Rack

В настоящее время у меня есть приложение Sinatra, работающее в обработчике FCGI. Я хочу написать обработчик, который будет находиться внутри файла стойки (вероятно, перед приложением Sinatra) и будет передавать потоковые файлы на другой сервер через сокеты (без предварительной буферизации на диске) и делать это с блокировкой запроса. Итак, что я хотел бы сделать, это какой-то рабочий процесс потокового декодирования-отправки без предварительной подготовки параметров. Я где-то читал, что есть проблема с этим, потому что именно из-за того, что команда Rails хочет видеть конвейер промежуточного программного обеспечения, все загрузки в Rack были перемотаны, что подразумевает, что загрузка будет буферизована, поэтому не только я не могу предоставить процесс загрузки в Rack, но я также должен буферизовать файл на диске и затем отправить его вниз по течению.

Есть ли какое-нибудь решение для межобэкэнда, которое связывает цикл запроса веб-сервера с ответчиком Rack и не вызывает перемотку на входе (и не вызывает буферизацию загрузки в памяти, что является абсолютным глупым безумием)? Каковы современные подходы к решению этой проблемы?

1 ответ

Решение

Вы правы: спецификация Rack требует перезаписываемого ввода, что подразумевает буферизацию. Кажется, Стойка не инструмент для этой работы.

Вы можете попробовать FastCGI, который действительно разрешает потоковую передачу без буферизации. Или, может быть, сервлет Java. Мой 2¢: Вам действительно это нужно? Если нет, не волнуйтесь, дисковое пространство действительно дешево. Если это так, вам действительно нужно делать это в Ruby?

edit: Mongrel:: HTTPRequest не поддерживает небуферизованные большие потоковые входы (без monkeypatching)

Другие вопросы по тегам