Skip to content

Instantly share code, notes, and snippets.

@uu59
Created January 24, 2012 18:35
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uu59/1671771 to your computer and use it in GitHub Desktop.
Save uu59/1671771 to your computer and use it in GitHub Desktop.
# -- coding: utf-8
require "pp"
require "rubygems"
require 'sinatra'
require 'sinatra/base'
module Sinatra
module Helpers
class Stream
def each(&front)
@front = front
callback do
@front.call("0\r\n\r\n")
end
@scheduler.defer do
begin
@back.call(self)
rescue Exception => e
@scheduler.schedule { raise e }
end
close unless @keep_open
end
end
def <<(data)
@scheduler.schedule do
size = data.to_s.bytesize
@front.call([size.to_s(16), "\r\n", data.to_s, "\r\n"].join)
end
self
end
end
end
end
get "/" do
headers "Transfer-Encoding" => "chunked"
stream do |out|
out << "foo"
sleep 0.3
out << "bar"*10
sleep 0.5
out << "jkjllkjk"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment