#webtransport #http-3 #protocols #bidirectional #low-latency #communication

wtransport-proto_lightyear_patch

WebTransport(基于HTTP3)协议的实现

1 个不稳定版本

0.1.8 2023年12月3日

#18 in #webtransport


wtransport_lightyear_patc…中使用

MIT/Apache

170KB
4K SLoC

WTransport Logo

Documentation Crates.io CI Zulip chat

WTransport

WebTransport 协议,纯 rustasync 友好。

简介

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

WebTransport的优势

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

查看库文档

注意

请注意,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的使用。

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

cargo run --example full

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

示例

其他语言

WTransport为以下语言提供了绑定

依赖项

~1.7–4MB
~100K SLoC