2011-12-26 51 views
0

我使用eventmachine來創建很多http查詢。 Http服務器可以執行這些連接。 但是對100個查詢定期調用5-7 errback。 爲什麼會這樣?很多查詢到eventmachine

require 'rubygems' 
require 'eventmachine' 
require 'em-http' 
urls = [] 
100.times do 
    urls << 'http://127.0.0.1/' 
end 
if urls.size < 1 
    puts "Usage: #{$0} <url> <url> <...>" 
    exit 
end 

pending = urls.size 

EM.run do 
    urls.each do |url| 
    http = EM::HttpRequest.new(url).get 
    http.callback do 
    puts "#{url}\n#{http.response_header.status} - #{http.response.length} bytes\n" 
    pending -= 1 
    EM.stop if pending < 1 
    end 
    http.errback do 
     puts "E::#{url}\n" + http.error.to_s 
     pending -= 1 
     EM.stop if pending < 1 
    end 
    end 
end 
} 
+0

什麼樣的錯誤?這可能與連接的另一端有關,例如,如果其他服務器只能處理50個併發連接,它可能會在超出連接時開始拒絕連接 – 2011-12-26 18:18:07

+0

僅供參考,您可能需要查看[Typhoeus及其關聯Hydra](https://github.com/dbalatero/typhoeus),如果你想異步執行多個HTTP請求。 – 2011-12-26 20:48:38

回答

0

您的本地主機可以處理多少個查詢?你在127.0.0.1發送100個併發請求,它能處理100個併發請求嗎?否則,這些請求將排隊並可能在EM :: HttpRequest中超時。

EM :: HttpRequest默認連接超時爲5秒,默認不活動超時爲10秒。

嘗試在本地主機上運行ab,並查看它可以處理多少次請求。