1

非同期シナトラを試してみて、問題が発生しました。

次の単純なコードを使用する場合:

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

/delay/ と ab を同時にリクエストすると、すべてのリクエストに 5 秒かかって問題なく動作します。

ただし、2 つの Chrome タブ (または Firefox) 内から /delay/ をリクエストするとブロックされ、順次実行され、2 番目のリクエストに 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 に答える