Потоковая загрузка в Интернет через Rack - PullRequest
3 голосов
/ 25 января 2011

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

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

1 Ответ

3 голосов
/ 25 января 2011

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

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

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

...