2013-11-21 23 views
2

我有問題了解使用帶有eventmachine的光纖模型調用外部API時發生了什麼。我有這樣的代碼在西納特拉:Sinatra中的光纖和多個http請求

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個連接(這意味着2種纖維處理在時刻2個的http請求)引導彩虹服務器。

現在,如果我提出了4個併發請求,應用程序應該首先管理2個,並且在進行外部API調用時,這些光纖應該能夠在等待外部呼叫完成時管理2個新的http請求, 對?

這沒有發生。在slowapi呼叫返回並釋放光纖之前,沒有新的http請求被接受。

這是正確的行爲嗎?我錯過了什麼嗎? 謝謝。

+0

也許看看https://github.com/raggi/async_sinatra –

回答

1

其實,這是正確的行爲。

當配置彩虹來處理使用2個纖維2 http請求,它實際上意味着在傳入的HTTP請求的數目被限制爲2。

所以,正在使用的同時緩慢纖維上的資源API被稱爲是免費的(內存,文件,數據庫連接等),但服務器不接受超過2個http連接,並且這些空閒光纖實際上不能處理任何東西。

彩虹應該在文檔中更清楚地指出這一點。會給他們發一封電子郵件。

希望這有助於某人。