, . , , , , ; http.callback. !
require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'nokogiri'
class SteamingDocument < Nokogiri::XML::SAX::Document
def start_element(name, attrs=[])
puts "starting: #{name}"
end
def end_element(name)
puts "ending: #{name}"
end
def end_document
puts "should now fire"
end
end
document = SteamingDocument.new
url = 'http://stackoverflow.com/feeds/question/2833829'
EventMachine.run do
io_read, io_write = IO.pipe
EventMachine.defer(proc {
parser = Nokogiri::XML::SAX::Parser.new(document)
parser.parse_io(io_read)
}, proc { EventMachine.stop })
http = EventMachine::HttpRequest.new(url).get
http.stream { |chunk| io_write << chunk }
http.callback { io_write.close }
end
source
share