Многочастный ответ в Ruby / Rack

Я хочу, чтобы мой сервер отправлял многочастный ответ (multipart / x-mixed-replace). Я бы предпочел какое-то решение с использованием фреймворка Sinatra или стандартного приложения Rack, но любой пример на ruby ​​был бы неплох. Вот эквивалент того, что я пытаюсь сделать в PHP:

<?php
  header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');

  print "--rn9012\n";
  print "Content-type: application/xml\n\n";
  print "<?xml version='1.0'?>\n";
  print "<content>First Part</content>\n";
  print "--rn9012\n";
  flush();

  sleep(5);
  print "Content-type: application/xml\n\n";
  print "<?xml version='1.0'?>\n";
  print "<content>Second Part</content>\n";
  print "--rn9012--\n";

?>
14.12.2008 23:27:14
1 ОТВЕТ
РЕШЕНИЕ

Вероятно, вы можете использовать метод out.flush для этого:

class TestController < ApplicationController
  def index
    render :text => lambda { |resp, out|
      out.puts 'start'
      out.flush
      10.times do
        out.puts '.'
        out.flush
        sleep 1
      end
      out.puts 'done'
    }
  end
end

Однако имейте в виду, что если вы используете Mongrel для обслуживания своего кода Ruby (как это делают многие люди, использующие RoR), вы вообще не сможете осуществлять потоковую передачу.

2
4.01.2009 13:06:18
Хорошая мысль о беспородных, я использую пассажира из-за этого.
Zach 7.01.2009 07:07:23
Я предполагаю, что из этой темы ( markmail.org/message/… ) это не работает, кроме случаев использования FastCGI.
Kris 16.09.2009 10:48:24