我无法理解使用带有 eventmachine 的纤维模型调用外部 API 时发生的情况。我在 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
此外,我正在使用:EventMachine
具有 2 个连接的连接器启动 Rainbows 服务器(这意味着 2 个光纤一次处理 2 个 http 请求)。
现在,如果我发出 4 个并发请求,应用程序首先应该管理 2 个,当进行外部 API 调用时,这些纤程应该能够在等待外部调用完成时管理 2 个新的 http 请求,对吧?
这没有发生。在 slowapi 调用返回并释放 Fiber 之前,不会接受新的 http 请求。
这是正确的行为吗?我错过了什么吗?谢谢。