gur*_*000 3 ruby asynchronous sinatra
我想从javascript开始一个很长的轮询请求,这很好,我希望我的ruby prog将多个body部分流式传输到javascript.为什么以下(伪)代码不起作用?
require 'rubygems'
require 'sinatra/async'
require 'eventmachine'
require 'thin'
require 'json'
class Test < Sinatra:Base
register Sinatra::Async
aget '/process' do
for c in 1..10
body {
{ :data => [ "this is part #{c}" ] }.to_json
end
end
end
run!
end
Run Code Online (Sandbox Code Playgroud)
也许我误解了长期轮询和异步应该做什么,但我的期望是我将多个机构送回客户端?我需要使用eventmachine吗?
谢谢
require 'rubygems'
require 'sinatra/async'
require 'thin'
require 'json'
class Test < Sinatra::Base
register Sinatra::Async
class JSONStream
include EventMachine::Deferrable
def stream(object)
@block.call object.to_json + "\n"
end
def each(&block)
@block = block
end
end
aget '/process' do
puts 'ok'
out = JSONStream.new
body out
EM.next_tick do
c = 0
timer = EM.add_periodic_timer(0.3) do
c += 1
out.stream :data => ["this is part #{c}"]
if c == 100
timer.cancel
out.succeed
end
end
end
end
run!
end
Run Code Online (Sandbox Code Playgroud)
另见:http://confreaks.net/videos/564-scotlandruby2011-real-time-rack
归档时间: |
|
查看次数: |
3319 次 |
最近记录: |