15 个版本

新增 0.1.14 2024年8月2日
0.1.13 2024年5月5日
0.1.12 2024年3月27日
0.1.10 2023年12月23日
0.1.3 2023年7月15日

643网络编程 中排名

Download history 590/week @ 2024-04-14 315/week @ 2024-04-21 527/week @ 2024-04-28 593/week @ 2024-05-05 212/week @ 2024-05-12 265/week @ 2024-05-19 299/week @ 2024-05-26 499/week @ 2024-06-02 359/week @ 2024-06-09 370/week @ 2024-06-16 341/week @ 2024-06-23 418/week @ 2024-06-30 462/week @ 2024-07-07 611/week @ 2024-07-14 887/week @ 2024-07-21 1145/week @ 2024-07-28

3,223 每月下载
12 个包中使用 (通过 wtransport)

MIT/Apache

190KB
4.5K SLoC

WTransport Logo

Documentation Crates.io CI Chat

WTransport

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

简介

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

WebTransport 的优势

  • 🚀 低延迟:WebTransport 设计用于最小化延迟,使其适用于游戏、视频流媒体和协作编辑等实时应用。
  • 🔄 双向通信:WebTransport 允许客户端和服务器之间同时交换数据,无需多个请求即可实现高效的往返通信。
  • 🔀 多路复用:使用 WebTransport,可以在单个连接上多路复用多个流,减少开销并提高性能。
  • 🔒 安全性:WebTransport 享有 Web 平台提供的加密传输和同源策略等安全功能。
  • 🌐 原生浏览器支持:WebTransport 在现代浏览器中原生支持,确保 Web 应用程序无缝集成并提高性能。

查看库文档

备注

请注意,WebTransport 仍然是一个 草案,尚未标准化。尽管 WTransport 库功能齐全,但还不被认为完全适用于生产环境。应谨慎使用,并可能随着 WebTransport 规范的发展而发生变化。

简单的 API

服务器 客户端
#[tokio::main]
async fn main() -> Result<()> {
    let config = ServerConfig::builder()
        .with_bind_default(4433)
        .with_identity(&identity)
        .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?;
    // ...
}

浏览器集成

WebTransport 在现代浏览器中得到 支持,增强了 Web 应用程序的功能。

例如,您可以使用以下 JavaScript 代码创建一个连接到 Rust 服务器的原生 浏览器 WebTransport 客户端

// Create a WebTransport instance connecting to the Rust server
let transport = new WebTransport('https://[::1]:4433');
await transport.ready;

// Create a bidirectional stream
let stream = await transport.createBidirectionalStream();

// Send data from the client to the server
await stream.writable.getWriter().write(new TextEncoder().encode("hello"));

// Read data reply from the server
let data = await stream.readable.getReader().read();
console.log(data);

查看 W3C WebTransport API 文档 了解更多详细信息并探索浏览器中 WebTransport 的全部功能。

入门指南

克隆仓库

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

运行 Full 示例

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

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

cargo run --example full

此示例启动了一个 echo WebTransport 服务器,可以接收消息。它还包括一个集成的 HTTP 服务器。

打开 Google Chrome 并导航到页面 http://127.0.0.1:8080

示例

其他语言

WTransport 为以下语言提供了绑定

依赖项

~1.5–2.3MB
~73K SLoC