8 个版本
0.1.0-alpha.8 | 2022 年 10 月 14 日 |
---|---|
0.1.0-alpha.7 | 2022 年 9 月 27 日 |
0.1.0-alpha.6 | 2022 年 8 月 8 日 |
0.1.0-alpha.4 | 2022 年 7 月 20 日 |
#2 in #udt
33 每月下载量
145KB
3.5K SLoC
tokio-udt
基于 Tokio 原语实现的基于 UDP 的数据传输协议 (UDT) 的实现。
什么是 UDT?
UDT 是一种高性能数据传输协议。它专门为高速广域网上的数据密集型应用程序设计,以克服 TCP 的效率和公平性问题。正如其名称所示,UDT 基于UDP构建,并提供可靠的数据流和消息服务。
要了解更多关于 UDT 的信息,请参阅 https://udt.sourceforge.io/
您还可以在 https://github.com/eminence/udt 上找到参考 C++ 实现
示例
UDT 监听器
use std::net::Ipv4Addr;
use tokio::io::{AsyncReadExt, Result};
use tokio_udt::UdtListener;
#[tokio::main]
async fn main() -> Result<()> {
let port = 9000;
let listener = UdtListener::bind((Ipv4Addr::UNSPECIFIED, port).into(), None).await?;
println!("Waiting for connections...");
loop {
let (addr, mut connection) = listener.accept().await?;
println!("Accepted connection from {}", addr);
let mut buffer = Vec::with_capacity(1_000_000);
tokio::task::spawn({
async move {
loop {
match connection.read_buf(&mut buffer).await {
Ok(_size) => {}
Err(e) => {
eprintln!("Connnection with {} failed: {}", addr, e);
break;
}
}
}
}
});
}
}
UDT 客户端
use std::net::Ipv4Addr;
use tokio::io::{AsyncWriteExt, Result};
use tokio_udt::UdtConnection;
#[tokio::main]
async fn main() -> Result<()> {
let port = 9000;
let mut connection = UdtConnection::connect((Ipv4Addr::LOCALHOST, port), None).await?;
loop {
connection.write_all(b"Hello World!").await?;
}
}
依赖项
~5–16MB
~204K SLoC