class Falcon::Proxy
def call(request, *)
def call(request, *) if endpoint = lookup(request) @count += 1 client = connect(endpoint) client.call(request) else super end end
def close
def close @clients.each_value(&:close) super end
def connect(endpoint)
def connect(endpoint) @clients[endpoint] ||= Async::HTTP::Client.new(endpoint) end
def initialize(app, hosts)
def initialize(app, hosts) super(app) @server_context = nil @hosts = hosts @clients = {} @count = 0 end
def lookup(request)
def lookup(request) # Trailing dot and port is ignored/normalized. if authority = request.authority.sub(/(\.)?(:\d+)?$/, '') return @hosts[authority] end end