Прокси-потоковый прокси вызывает Net :: HTTPOK # read_body вызывается дважды - PullRequest
1 голос
/ 22 февраля 2012

Итак, у меня есть приложение Rack, которое действует как прокси. Я реализовал net / http api, чтобы справиться с коммуникацией, поэтому приложение стойки в основном называет его так:

api.new(request_method, rack_request, options).response

.response возвращает действительный ответ стойки [состояние, заголовки, тело].

Body является экземпляром API, и его реализация выглядит следующим образом (упрощенная версия):

def initialize
  ...
  @proxy_connection = Net::HTTP.start(proxied_uri.host, proxied_uri.port)
  @proxy_connection.request(@proxy_request) do |response|
    @proxy_response = response
  end
end

def each(&block)
  @proxy_response.read_body(&block)
end

def to_s
  @proxy_response.read_body
end

Приложение стойки может затем вызвать прокси-службу с полным ответом с помощью to_s или в виде потоковой передачи и получить ответ в виде кусков с каждым.

Дело в том, что когда я возвращаю ответ в стойке, я получаю следующую трассировку стека: https://gist.github.com/1879724

Судя по всему, сервер или стойка вызывают «каждый» более одного раза, но я не уверен, что может быть причиной этого.

Приложение Rack работает под рельсами 3.2.1.

...