Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This commit refactors the
server
module as we discussed a bit offline.The main changes are:
The entry point is how
Http
, the implementation ofServerProto
.This type has a
new
constructor as well as builder methods toconfigure it.
A high-level entry point of
Http::bind
was added which returns aServer
. Binding a protocol to a port requires a socket address(where to bind) as well as the instance of
NewService
. Internallythis creates a core and a TCP listener.
The returned
Server
has a few methods to learn about itself, e.g.local_addr
andhandle
, but mainly has two methods:run
andrun_until
.The
Server::run
entry point will execute a server infinitely, neverhaving it exit.
The
Server::run_until
method is intended as a graceful shutdownmechanism. When the provided future resolves the server stops
accepting connections immediately and then waits for a fixed period of
time for all active connections to get torn down, after which the
whole server is torn down anyway.
Finally a
Http::bind_connection
method exists as a low-level entrypoint to spawning a server connection. This is used by
Server::run
as is intended for external use in other event loops if necessary or
otherwise low-level needs.