使用带有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
连接器启动Rainbows服务器,连接器有2个连接(这意味着2个光纤一次处理2个http请求)。
现在,如果我发出4个并发请求,应用程序应首先管理2个,并且在进行外部API调用时,这些光纤应该能够在等待外部调用完成时管理2个新的http请求,对?
这没有发生。在slowapi调用返回并释放光纤之前,没有新的http请求被接受。
这是正确的行为吗?我错过了什么吗? 感谢。
答案 0 :(得分:1)
实际上,这是正确的行为。
配置彩虹以使用2根光纤处理 2个http请求时,实际上意味着传入的http请求数量限制为2个。
因此,调用慢速API时光纤使用的资源是免费的(内存,文件,数据库连接等),但是服务器不接受超过2个http连接,并且这些免费光纤实际上无法处理任何内容
彩虹应该在文档中更清楚地指出这一点。会给他们发一封电子邮件。
希望这有助于某人。