#web-transport #http-3 #protocols #low-latency #bidirectional #communication

wtransport_lightyear_patch

WebTransport(通过HTTP3)协议的实现

3个版本

0.1.10 2023年12月3日
0.1.9 2023年12月3日
0.1.8 2023年12月3日

#13 in #webtransport

MIT/Apache

335KB
7K SLoC

WTransport Logo

Documentation Crates.io CI Zulip chat

WTransport

WebTransport协议,纯Rust,适合异步操作。

简介

WebTransport是一种正在开发中的新协议,旨在通过互联网实现客户端和服务器之间低延迟、双向通信。它旨在通过提供更高效和灵活的传输层来克服现有协议(如HTTP和WebSocket)的局限性。

WebTransport的好处

  • 🚀 低延迟:WebTransport的设计目标是最小化延迟,非常适合游戏、视频流和协作编辑等实时应用。
  • 🔄 双向通信:WebTransport允许客户端和服务器之间同时进行数据交换,无需多个请求即可实现高效的往返通信。
  • 🔀 复用:使用WebTransport,可以在单个连接上复用多个流,从而减少开销并提高性能。
  • 🔒 安全性:WebTransport受益于网络平台提供的安全功能,包括传输加密和同源策略。

查看库文档

注意

请注意,WebTransport仍处于草案阶段,尚未标准化。虽然WTransport库功能齐全,但并不完全适合生产环境。请谨慎使用,并且随着WebTransport规范的演变,它可能会发生变化。

简单的API

服务器 客户端
#[tokio::main]
async fn main() -> Result<()> {
    let config = ServerConfig::builder()
        .with_bind_default(4433)
        .with_certificate(certificate)
        .build();

    let connection = Endpoint::server(config)?
        .accept()
        .await     // Awaits connection
        .await?    // Awaits session request
        .accept()  // Accepts request
        .await?;   // Awaits ready session

    let stream = connection.accept_bi().await?;
    // ...
}
#[tokio::main]
async fn main() -> Result<()> {
    let config = ClientConfig::default();

    let connection = Endpoint::client(config)?
        .connect("https://[::1]:4433")
        .await?;

    let stream = connection.open_bi().await?.await?;
    // ...
}

入门

克隆仓库

git clone https://github.com/BiagioFesta/wtransport.git
cd wtransport/

运行Full示例

examples/full.rs是一个最小但完整的服务器示例,演示了WebTransport的使用。

您可以使用Rust的包管理器Cargo运行此示例,以下命令:

cargo run --example full

此示例启动一个可以接收消息的echo WebTransport服务器。它还包括一个集成的HTTP服务器,并使用自签名TLS证书建立连接所需的选项启动Google Chrome。

示例

其他语言

WTransport为以下语言提供了绑定

依赖关系

~17–30MB
~573K SLoC