2

Ruby 1.9.3 を使用してローカルホストで単純な goliath サーバーを実行していますが、http 要求を非同期的に実行していません。コードは次のとおりです。

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

実行するab -n 100 http://127.0.0.1:9000/と、各リクエストが完了するまで待機していることがわかります。これは、呼び出しがブロックされていることを意味します。

ただし、ドキュメンテーションによると、Goliath は Em-synchrony を使用して「同期のように見える」コードを記述できるようにしていますが、ここではそうではありません。

ヒントやコメントをいただければ幸いです。

4

1 に答える 1