27 个版本
0.12.4 | 2024年7月12日 |
---|---|
0.11.2 | 2024年2月18日 |
0.11.0 | 2023年12月29日 |
0.10.0 | 2023年8月30日 |
0.1.1 | 2022年7月23日 |
在 网络编程 类别中排名 #528
每月下载量 98 次
185KB
4.5K SLoC
提供发送器/接收器类型,用于通过泛型 IO 流与类似通道的 API 进行通信。它将序列化、反序列化和传输数据的负担从您的肩上卸下,让您专注于项目的关键逻辑。它是
-
快速:简单的协议允许低开销的数据传输。
-
模块化:通道的 sans-io 方法意味着它可以用在任何介质上,无论是网络套接字、管道、共享内存区域、文件,还是任何其他东西。
-
人体工程学:提供的 API 使您能够将时间用于构建应用程序的逻辑,而不是担心数据传输。
-
异步和同步优先:通道原生支持同步和异步操作,无需使用启动线程或运行单独运行时的任何复杂方法。
实际应用
[dependencies.channels]
version = "0.12"
features = ["full"]
use tokio::net::TcpStream;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
enum Message {
Ping,
Pong
}
#[tokio::main]
async fn main() {
let stream = TcpStream::connect("127.0.0.1:8080").await.unwrap();
let (r, w) = stream.into_split();
let (mut tx, mut rx) = channels::channel::<Message, _, _>(r, w);
loop {
match rx.recv().await.unwrap() {
Message::Ping => {
println!("pinged!");
tx.send(Message::Pong).await.unwrap();
}
Message::Pong => {
println!("ponged!");
}
}
}
}
更多内容请参阅: examples/
工作原理
通道实现了一种通信协议,允许通过任何介质发送和接收数据。它可以在 任何 同步或异步流上工作。目前它可以与以下 IO 特性一起使用
std::io::{Read,Write}
tokio::io::{AsyncRead,AsyncWrite}
futures::io::{AsyncRead,AsyncWrite}
core2::io::{Read,Write}
smol::io::{AsyncRead,AsyncWrite}
embedded_io::{Read,Write}
有关底层通信协议如何工作的更多信息,请参阅 此处。
许可证
-
此仓库中的所有代码均根据 MIT 许可证授权,许可证副本可在 此处 找到。
-
此仓库中的所有艺术品均根据 Creative Commons Attribution-NonCommercial 4.0 国际 许可证授权。许可证副本可在 此处 找到。
依赖项
~0–11MB
~143K SLoC