15个不稳定版本 (6个破坏性更新)
0.7.0 | 2024年4月2日 |
---|---|
0.6.1 | 2024年2月10日 |
0.5.1 | 2024年2月3日 |
0.4.1 | 2023年3月20日 |
0.3.0 | 2022年7月30日 |
#1289 in 网络编程
每月 62 次下载
170KB
3K SLoC
Rust数据传输协议
适用于Rust的跨平台网络接口。
数据传输协议
数据传输协议(DTP)是一个更大的项目,旨在让任何语言都能进行便捷的网络编程。请参阅完整项目这里。
安装
在Cargo.toml
中添加包
rustdtp = "0.7"
创建服务器
可以使用Server
实现来构建服务器
use rustdtp::*;
#[tokio::main]
async fn main() {
// Create a server that receives strings and returns the length of each string
let (mut server, mut server_events) = Server::builder()
.sending::<usize>()
.receiving::<String>()
.with_event_channel()
.start(("0.0.0.0", 0))
.await
.unwrap();
// Iterate over events
while let Ok(event) = server_events.next().await {
match event {
ServerEvent::Connect { client_id } => {
println!("Client with ID {} connected", client_id);
}
ServerEvent::Disconnect { client_id } => {
println!("Client with ID {} disconnected", client_id);
}
ServerEvent::Receive { client_id, data } => {
// Send back the length of the string
server.send(client_id, data.len()).await.unwrap();
}
ServerEvent::Stop => {
// No more events will be sent, and the loop will end
println!("Server closed");
}
}
}
}
创建客户端
可以使用Client
实现来构建客户端
use rustdtp::*;
#[tokio::main]
async fn main() {
// Create a client that sends a message to the server and receives the length of the message
let (mut client, mut client_events) = Client::builder()
.sending::<String>()
.receiving::<usize>()
.with_event_channel()
.connect(("127.0.0.1", 29275))
.await
.unwrap();
// Send a message to the server
let msg = "Hello, server!".to_owned();
client.send(msg.clone()).await.unwrap();
// Receive the response
match client_events.next().await.unwrap() {
ClientEvent::Receive { data } => {
// Validate the response
println!("Received response from server: {}", data);
assert_eq!(data, msg.len());
}
event => {
// Unexpected response
panic!("expected to receive a response from the server, instead got {:?}", event);
}
}
}
安全性
信息安全是内置的。通过网络接口发送的每条消息都使用AES-256进行加密。密钥交换使用2048位RSA密钥对进行。
依赖关系
~8–15MB
~191K SLoC