Async::HTTPSourceAsyncHTTPProtocolHTTP1Connection

class Connection

An HTTP/1 connection that wraps an IO stream with version and state tracking.

Definitions

def initialize(stream, version, **options)

Initialize the connection with an IO stream and HTTP version.

Signature

parameter stream IO::Stream

The underlying stream.

parameter version String

The negotiated HTTP version string.

parameter options Hash

Additional options for the connection.

Implementation

def initialize(stream, version, **options)
	super(stream, **options)
	
	# On the client side, we need to send the HTTP version with the initial request. On the server side, there are some scenarios (bad request) where we don't know the request version. In those cases, we use this value, which is either hard coded based on the protocol being used, OR could be negotiated during the connection setup (e.g. ALPN).
	@version = version
end

def to_s

Signature

returns String

A string representation of this connection.

Implementation

def to_s
	"\#<#{self.class} negotiated #{@version}, #{@state}>"
end

def as_json(...)

Signature

returns String

A JSON-compatible representation.

Implementation

def as_json(...)
	to_s
end

def to_json(...)

Signature

returns String

A JSON string representation.

Implementation

def to_json(...)
	as_json.to_json(...)
end

def http1?

Signature

returns Boolean

Whether this is an HTTP/1 connection.

Implementation

def http1?
	true
end

def http2?

Signature

returns Boolean

Whether this is an HTTP/2 connection.

Implementation

def http2?
	false
end

def peer

Signature

returns Protocol::HTTP::Peer

The peer information for this connection.

Implementation

def peer
	@peer ||= ::Protocol::HTTP::Peer.for(@stream.io)
end

def concurrency

Signature

returns Integer

The maximum number of concurrent requests (always 1 for HTTP/1).

Implementation

def concurrency
	1
end

def viable?

Can we use this connection to make requests?

Implementation

def viable?
	self.idle? && @stream&.readable?
end

def reusable?

Signature

returns Boolean

Whether the connection can be reused for another request.

Implementation

def reusable?
	@persistent && @stream && !@stream.closed?
end