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日

#146 in 网络编程

Download history 625/week @ 2024-05-03 226/week @ 2024-05-10 284/week @ 2024-05-17 272/week @ 2024-05-24 355/week @ 2024-05-31 456/week @ 2024-06-07 386/week @ 2024-06-14 334/week @ 2024-06-21 273/week @ 2024-06-28 523/week @ 2024-07-05 461/week @ 2024-07-12 888/week @ 2024-07-19 856/week @ 2024-07-26 1412/week @ 2024-08-02 936/week @ 2024-08-09 816/week @ 2024-08-16

每月4,217次下载
11 个crate(8个直接)中使用

MIT/Apache

395KB
8K SLoC

WTransport Logo

Documentation Crates.io CI Chat

WTransport

WebTransport 协议,纯Rust,异步友好。

简介

WebTransport是一种正在开发中的新协议,旨在通过Web在客户端和服务器之间实现低延迟、双向通信。它旨在通过提供一个更高效、更灵活的传输层来解决现有协议(如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的使用。

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

cargo run --example full

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

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

示例

其他语言

WTransport为以下语言提供了绑定

依赖项

~16–27MB
~511K SLoC