Голиаф не асинхронный

Я использую простой сервер goliath на своем локальном хосте с Ruby 1.9.3, и он не выполняет 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/ Я вижу, что он ожидает выполнения каждого запроса, что означает, что вызовы блокируются.

Однако, согласно документации, Голиаф использует Em-synchrony, чтобы позволить мне написать "синхронно выглядящий" код, который здесь не тот.

Буду признателен за любые подсказки и комментарии!

1 ответ

Кредиты идут к igrigorik за ответ. Я цитирую его ответ здесь:

Вам также нужно указать уровень параллелизма при запуске ab... например, ab -c 10:)

Также убедитесь, что вы запускаете его в производственном режиме (-e prod).

Другие вопросы по тегам