非同期シナトラを試してみて、問題が発生しました。
次の単純なコードを使用する場合:
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"