Ruby异步Sinatra流多body,如何实现长尾疑问?
- 内容介绍
- 文章标签
- 相关推荐
本文共计265个文字,预计阅读时间需要2分钟。
我想从JavaScript开始一个很长的轮询请求,这很好,我希望我的Ruby程序能将多个body部分流式传输到JavaScript。以下代码(伪代码)为什么不起作用?
rubyrequire 'rubygems'require 'sinatra/async'require 'eventmachine're
我想从 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
也许我误解了长期轮询和异步应该做什么,但我的期望是我将多个机构送回客户端?我需要使用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
另见:confreaks.net/videos/564-scotlandruby2011-real-time-rack
本文共计265个文字,预计阅读时间需要2分钟。
我想从JavaScript开始一个很长的轮询请求,这很好,我希望我的Ruby程序能将多个body部分流式传输到JavaScript。以下代码(伪代码)为什么不起作用?
rubyrequire 'rubygems'require 'sinatra/async'require 'eventmachine're
我想从 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
也许我误解了长期轮询和异步应该做什么,但我的期望是我将多个机构送回客户端?我需要使用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
另见:confreaks.net/videos/564-scotlandruby2011-real-time-rack

