WebTransport is a modern update to Websockets, transmitting data between client and server using http3.
WTransport is an implementation http3 WebTransport written in Rust.
BiagioFesta / wtransport
Async-friendly WebTransport implementation in Rust
WTransport
WebTransport protocol, pure-rust, async-friendly.
Introduction
WebTransport is a new protocol being developed to enable low-latency, bidirectional communication between clients and servers over the web It aims to address the limitations of existing protocols like HTTP and WebSocket by offering a more efficient and flexible transport layer.
Benefits of WebTransport
- 🚀 Low latency: WebTransport is designed to minimize latency, making it suitable for real-time applications such as gaming, video streaming, and collaborative editing.
- 🔄 Bidirectional communication: WebTransport allows simultaneous data exchange between the client and server, enabling efficient back-and-forth communication without the need for multiple requests.
- 🔀 Multiplexing: With WebTransport, multiple streams can be multiplexed over a single connection, reducing overhead and improving performance.
- 🔒 Security: WebTransport benefits from the security features provided by the web platform, including transport encryption and same-origin policy.
Notes
Please be aware that WebTransport…
Benefits of WebTransport:
- 🚀 Low latency: WebTransport is designed to minimize latency, making it suitable for real-time applications such as gaming, video streaming, and collaborative editing.
- 🔄 Bidirectional communication: WebTransport allows simultaneous data exchange between the client and server, enabling efficient back-and-forth communication without the need for multiple requests.
- 🔀 Multiplexing: With WebTransport, multiple streams can be multiplexed over a single connection, reducing overhead and improving performance.
- 🔒 Security: WebTransport benefits from the security features provided by the web platform, including transport encryption and same-origin policy.
WTransport's simple API
WTransport comes with both server and client implementaton. Here is how it looks:
Server
#[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?;
// ...
}
Client
#[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?;
// ...
}
Get Started
The repo has a full example, where you launch a server and a chrome instance to communicate with each other over h3 WebTransport protocol. Here you can find it:
https://github.com/BiagioFesta/wtransport/blob/master/wtransport/examples/full.rs
Top comments (0)