1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
use Rack::ContentType, "text/plain"
app = lambda do |env|
# streamed pieces to be sent
pieces = %w{Hello streamy world}
response_headers = {}
# set a fixed content length in the header if requested
if env['REQUEST_PATH'] == '/streamed/fixed_length'
response_headers['Content-Length'] = pieces.join.length.to_s
end
response_headers["rack.hijack"] = lambda do |io|
# Write directly to IO of the response
begin
# return the response in pieces
pieces.each do |x|
sleep(0.1)
io.write(x)
io.flush
end
ensure
io.close
end
end
[200, response_headers, nil]
end
run app
|