Module server

Source
Available on crate feature h3 only.
Expand description

This module provides methods to create a http/3 Server.

It allows to accept incoming requests, and send responses.

§Examples

§Simple example

async fn doc<C>(conn: C)
where
C: h3::quic::Connection<bytes::Bytes> + 'static,
<C as h3::quic::OpenStreams<bytes::Bytes>>::BidiStream: Send + 'static
{
    let mut server_builder = h3::server::builder();
    // Build the Connection
    let mut h3_conn = server_builder.build(conn).await.unwrap();
    loop {
        // Accept incoming requests
        match h3_conn.accept().await {
            Ok(Some(resolver)) => {
                // spawn a new task to handle the request
                tokio::spawn(async move {
                    // get the request
                    let (req, mut stream) = resolver.resolve_request().await.unwrap();
                    // build a http response
                    let response = http::Response::builder().status(http::StatusCode::OK).body(()).unwrap();
                    // send the response to the wire
                    stream.send_response(response).await.unwrap();
                    // send some date
                    stream.send_data(bytes::Bytes::from("test")).await.unwrap();
                    // finnish the stream
                    stream.finish().await.unwrap();
                });
            }
            Ok(None) => {
                // break if no Request is accepted
                break;
            }
            Err(err) => {
                break;
            }
        }
    }
}

§File server

A ready-to-use example of a file server is available here

Structs§

Builder
Builder of HTTP/3 server connections.
Connection
Server connection driver
RequestResolver
Helper struct to await the request headers and return a Request object
RequestStream
Manage request and response transfer for an incoming request

Functions§

builder
Create a builder of HTTP/3 server connections