2014-02-19 8 views
2

내 로컬 호스트에서 Ruby 1.9.3을 사용하여 간단한 골리앗 서버를 실행 중이며 http 요청을 비동기 적으로 실행하지 않습니다. 내가 ab -n 100 http://127.0.0.1:9000/을 실행하면Goliath가 비동기가 아닙니다.

require 'goliath' 
require 'em-synchrony' 
require 'em-synchrony/em-http' 

class Server < Goliath::API 
    use Goliath::Rack::Validation::RequestMethod, %w(GET PUT POST) 

    def initialize 
    super 
    puts "Started up Bookcover server... Let 'em come!" 
    end 

    def response(env) 
    thumbnail_cover_url, large_book_cover_url = ["http://riffle-bookcovers.s3.amazonaws.com/B00GJYXA5I-thumbnail.jpg", "http://riffle-bookcovers.s3.amazonaws.com/B00GJYXA5I-original.jpg"] 
    puts "start" 
    a = EM::HttpRequest.new(thumbnail_cover_url).get 
    b = EM::HttpRequest.new(large_book_cover_url).get 
    puts "done" 
    [200, {}, "Hello World"] 
    end 
end 

나는 통화가 차단되는 것을 의미 할 각 요청을 기다립니다 볼 수 있습니다 여기에 코드입니다.

그러나 문서에 따르면 Goliath는 Em-synchrony를 사용하여 여기에 해당하지 않는 "동기식"코드를 작성합니다.

나는 어떤 힌트와 의견을 주셔서 감사합니다!

답변

0

크레딧은 igrigorik입니다. 나는 그의 대답에서 인용한다. here :

ab를 실행할 때 동시성 수준을 지정해야한다. eg. ab -c 10 :)

또한 프로덕션 모드 (-e prod)에서 실행해야합니다.