Module: MessagePack::RPCOverHTTP::Server::Streamer
- Defined in:
- lib/msgpack/rpc_over_http/server/streamer.rb
Overview
Support streaming
Defined Under Namespace
Classes: Body
Instance Method Summary collapse
-
#chunk(obj) ⇒ Object
call-seq: chunk(obj).
-
#stream(&writer) ⇒ Object
call-seq: stream(&writer) -> streamable body.
Instance Method Details
#chunk(obj) ⇒ Object
call-seq:
chunk(obj)
Send a object as chunked data in block of stream().
61 62 63 |
# File 'lib/msgpack/rpc_over_http/server/streamer.rb', line 61 def chunk(obj) Fiber.yield(obj) end |
#stream(&writer) ⇒ Object
call-seq:
stream(&writer) -> streamable body
Returns a Body object that responds to each. Chunks of body are created with calling chunk() in given block.
def passwd
return stream do
File.open('/etc/passwd') do |file|
while line = file.gets
chunk(file.gets)
end
end
end
end
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/msgpack/rpc_over_http/server/streamer.rb', line 37 def stream(&writer) fi = Fiber.new do writer.call end Body.new do |msgid, sender| begin while true chunk = fi.resume break unless fi.alive? sender.call(ResponsePacker.pack(msgid, nil, chunk)) end rescue RemoteError => ex sender.call(ResponsePacker.pack(msgid, ex.class.name, nil)) rescue ::RuntimeError => ex sender.call(ResponsePacker.pack(msgid, RuntimeError.name, nil)) end end end |