class Async::HTTP::Server

Attributes

endpoint[R]
protocol[R]
scheme[R]

Public Class Methods

for(*arguments, **options, &block) click to toggle source
# File lib/async/http/server.rb, line 32
def self.for(*arguments, **options, &block)
        self.new(block, *arguments, **options)
end
new(app, endpoint, protocol: endpoint.protocol, scheme: endpoint.scheme) click to toggle source
Calls superclass method
# File lib/async/http/server.rb, line 36
def initialize(app, endpoint, protocol: endpoint.protocol, scheme: endpoint.scheme)
        super(app)
        
        @endpoint = endpoint
        @protocol = protocol
        @scheme = scheme
end

Public Instance Methods

accept(peer, address, task: Task.current) click to toggle source
# File lib/async/http/server.rb, line 48
def accept(peer, address, task: Task.current)
        connection = @protocol.server(peer)
        
        Console.logger.debug(self) {"Incoming connnection from #{address.inspect} to #{@protocol}"}
        
        connection.each do |request|
                # We set the default scheme unless it was otherwise specified.
                # https://tools.ietf.org/html/rfc7230#section-5.5
                request.scheme ||= self.scheme
                
                # This is a slight optimization to avoid having to get the address from the socket.
                request.remote_address = address
                
                # Console.logger.debug(self) {"Incoming request from #{address.inspect}: #{request.method} #{request.path}"}
                
                # If this returns nil, we assume that the connection has been hijacked.
                self.call(request)
        end
ensure
        connection&.close
end
run() click to toggle source
# File lib/async/http/server.rb, line 70
def run
        @endpoint.accept(&self.method(:accept))
end