如何用异步Sinatra流处理多个请求的Ruby代码?

更新于
2026-10-09 23:29:47
2阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计275个文字,预计阅读时间需要2分钟。

如何用异步Sinatra流处理多个请求的Ruby代码?

从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

如何用异步Sinatra流处理多个请求的Ruby代码?

本文共计275个文字,预计阅读时间需要2分钟。

如何用异步Sinatra流处理多个请求的Ruby代码?

从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

如何用异步Sinatra流处理多个请求的Ruby代码?