仅当从浏览器选项卡请求时,Async Sinatra才会阻止

时间:2012-05-28 15:03:41

标签: ruby asynchronous sinatra

我正在尝试异步Sinatra并遇到问题。

使用以下简单代码时:

require 'sinatra'
require 'sinatra/async'

Sinatra.register Sinatra::Async

aget '/delay/?' do
  logger.info "Connected"
  EM.add_timer(5) { body {"delayed for 5 seconds" } }
end

当我同时请求/延迟/用ab时,它运行正常,对所有请求花费5秒。

但是当我从2个Chrome标签页(或Firefox)中请求/延迟/时,它会阻止,并且它会按顺序执行,导致第二个请求需要10秒。

有趣的是,从多个Safari标签请求它,再次执行正常(并行)。

任何想法,可能导致这种行为的原因是什么?

宝石版本:

gem 'sinatra', "~> 1.3.2"
gem "eventmachine", "1.0.0.beta.4.1"
gem 'thin', "~> 1.3.1"
gem "async_sinatra", "~> 1.0.0"

1 个答案:

答案 0 :(得分:0)

更新:似乎浏览器缓存是导致Firefox和Chrome的原因。任何URL只能有1个活动缓存写入。添加查询参数实际上可以解决此问题。

来源:Multiple Ajax requests for same URL