13个版本 (2个稳定版)
1.0.1 | 2024年3月21日 |
---|---|
0.6.0 | 2024年3月20日 |
0.5.0 | 2023年12月28日 |
#10 in #数据传输
用于 2 crate
110KB
1K SLoC
Tcp-Handler
描述
更方便地使用tokio::net::TcpStream
来传输bytes::Bytes
数据块。
您可以使用额外的crate来读取和写入数据,例如serde
、postcard
和variable-len-reader
。
查看tcp-server
和tcp-client
以方便地构建您的TCP应用程序。
特性
- 基于
tokio
和bytes
。 - 支持
ReadHalf
和WriteHalf
的tokio::net::TcpStream
。(实际上任何实现了AsyncRead
/AsyncWrite
和Unpin
的都可以使用。) - 支持
bytes::Buf
。因此,您可以通过调用chain
来发送不连续的数据块。 - 支持加密(
rsa
和aes
)。 - 支持压缩(
flate2
)。 - 完整的API文档和数据模型。
用法
将其添加到您的Cargo.toml
[dependencies]
tcp-handler = "^1.0"
注意
如果使用加密模式进行client_init
在调试模式下非常慢,请在客户端的Cargo.toml
中添加此内容
[profile.dev.package.num-bigint-dig]
opt-level = 3 # Speed up rsa key gen.
示例
使用 TcpHandler
,您可以以类似的方式使用所有协议。
use anyhow::{Error, Result};
use bytes::{Buf, BufMut, BytesMut};
use tcp_handler::raw::*;
use tokio::{spawn, try_join};
use tokio::net::{TcpListener, TcpStream};
use variable_len_reader::{VariableReader, VariableWriter};
#[tokio::main]
async fn main() -> Result<()> {
// Create tcp stream.
let server = TcpListener::bind("localhost:0").await?;
let mut client = TcpStream::connect(server.local_addr()?).await?;
let (mut server, _) = server.accept().await?;
let client = spawn(async move {
let mut client = TcpClientHandlerRaw::from_stream(client, "YourApplication", "1.0.0").await?;
// Send.
let mut writer = BytesMut::new().writer();
writer.write_string("hello server.")?;
client.send(&mut writer.into_inner()).await?;
Ok::<_, Error>(())
});
let server = spawn(async move {
let mut server = TcpServerHandlerRaw::from_stream(server, "YourApplication", |v| v == "1.0.0", "1.0.0").await?;
assert_eq!(server.get_client_version(), "1.0.0");
// Receive.
let mut reader = server.recv().await?.reader();
let res = reader.read_string()?;
assert_eq!(res, "hello server.");
Ok::<_, Error>(())
});
try_join!(client, server)?;
Ok(())
}
协议版本
内部使用的协议版本代码。注意,只有当服务器和客户端的代码相同时,它们才能正常连接。
crate 版本 | 协议版本 |
---|---|
>=0.6.0 | 1 |
<0.6.0 | 0 |
许可证
许可方式为以下之一
- Apache License 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖关系
~3–14MB
~171K SLoC