#quic #tokio #async #server #client #boringssl #back-end

tokio-quicker

为 tokio 提供的易于使用的 quic 库

1 个不稳定版本

0.0.2 2024 年 1 月 28 日
0.0.1 2024 年 1 月 28 日

#3#boringssl

MIT 许可证

49KB
1K SLoC

tokio-quicker

使用 quiche 的 tokio 异步 QUIC 监听器/套接字。

路线图

  • 用于服务器用途的 QuicListener。
  • 用于客户端用途的 QuicSocket。
  • Boringssl 密钥生成(可以通过禁用默认功能来禁用)。
  • 可更换的后端(quiche/quinn)以支持 boringssl 和 openssl。

示例

客户端

首先创建一个 QuicSocket

let mut connection = QuicSocket::bind("127.0.0.1:0")
        .await?
        .connect(Some("localhost"), "127.0.0.1:4433")
        .await?;

然后您可以开始打开新的 QuicStream 或从服务器接收它们。

let mut stream = connection.bidi(1).await?;
let mut stream = connection.incoming().await?;

这些实现了 tokio 的 AsyncReadAsyncWrite 特性。

服务器

再次创建一个 QuicListener

let mut listener = QuicListener::bind("127.0.0.1:4433").await?;

然后您可以使用 while 循环来接受传入的连接,并在线程上直接处理它们或将它们移动到新线程。

while let Ok(mut connection) = listener.accept().await {
    tokio::spawn(async move {
        let mut stream = connection.incoming().await?;
        ...
        stream.shutdown().await?;
    });
}

依赖项

~68MB
~1.5M SLoC