У меня проблемы с пониманием того, что происходит при вызове внешних API-интерфейсов с использованием модели волокон с eventmachine. У меня есть этот код в Синатры:Волокна и несколько HTTP-запросов в Sinatra
get '/' do
conn = Faraday.new 'http://slow-api-call' do |con|
con.adapter :em_http
end
resp = conn.get
resp.on_complete {
request.env['async.callback'].call(resp)
}
throw :async
end
Кроме того, я загрузке сервера Rainbows с помощью разъема :EventMachine
с 2-мя соединениями (это означает, что 2 волокна обработки 2 запроса HTTP одновременно).
Теперь, если я сделал 4 одновременных запроса, приложение должно сначала управлять 2, и когда внешние вызовы API выполняются, эти волокна должны иметь возможность управлять 2 новыми HTTP-запросами, ожидая завершения внешнего вызова , правильно?
Этого не происходит. Никакие новые HTTP-запросы не принимаются до тех пор, пока вызов slowapi не вернется и не освободит волокно.
Это правильное поведение? Я что-то упускаю? Спасибо.
Возможно, посмотрите на https://github.com/raggi/async_sinatra –