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
streamIO::Stream The underlying stream.
-
parameter
versionString The negotiated HTTP version string.
-
parameter
optionsHash 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