1

我正在尝试异步 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 同时请求 /delay/ 时,它运行良好,所有请求都需要 5 秒。

但是,当我从 2 个 Chrome 选项卡(或 Firefox)中请求 /delay/ 时,它确实会阻塞,并且它会按顺序执行,导致第二个请求需要 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"
4

1 回答 1

0

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

来源:对同一 URL 的多个 Ajax 请求

于 2012-05-29T10:39:45.067 回答