2011-12-26 10 views
0

私はイベントマシンを使用して多くのhttpクエリを作成します。 HTTPサーバーはこれらの接続を実行できます。 しかし、100回のクエリで定期的に5-7エラーが発生します。 なぜそれができますか?イベントマシンへの多くの問い合わせ

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の並行接続のみを処理できる場合など、接続の拒否を開始する可能性がある場合など、接続の相手側と同じです。 –

+0

FYIと同様に、[Typhoeusとその複数のHTTPリクエストを非同期で実行する場合は、[関連するHydra](https://github.com/dbalatero/typhoeus)を参照してください。 –

答えて

0

ローカルホストはいくつのクエリを処理できますか? 127.0.0.1で100件の同時リクエストを送信しています.100件の同時リクエストを処理できますか?それ以外の場合、リクエストはキューに入れられ、おそらくEM :: HttpRequestでタイムアウトします。

EM :: HttpRequestのデフォルト接続タイムアウトは5秒で、デフォルトの非アクティブタイムアウトは10秒です。

ローカルホストに対してabを実行して、1秒間に処理できるリクエストの数を確認してください。

関連する問題