Available on crate feature
compression
only.Expand description
Compression protocol. Without encryption.
With compression, you can reduce the size of the data sent by the server and the client.
Set the compression level by calling [tcp_handler::config::set_config
].
§Example
use anyhow::Result;
use bytes::{Buf, BufMut, BytesMut};
use tcp_handler::protocols::compress::*;
use tokio::net::{TcpListener, TcpStream};
use variable_len_reader::{VariableReader, VariableWriter};
#[tokio::main]
async fn main() -> Result<()> {
let server = TcpListener::bind("localhost:0").await?;
let mut client = TcpStream::connect(server.local_addr()?).await?;
let (mut server, _) = server.accept().await?;
let c_init = client_init(&mut client, "test", "0").await;
let s_init = server_init(&mut server, "test", |v| v == "0").await;
server_start(&mut server, "test", "0", s_init).await?;
client_start(&mut client, c_init).await?;
let mut writer = BytesMut::new().writer();
writer.write_string("hello server.")?;
let mut bytes = writer.into_inner();
send(&mut client, &mut bytes).await?;
let mut reader = recv(&mut server).await?.reader();
let message = reader.read_string()?;
assert_eq!("hello server.", message);
let mut writer = BytesMut::new().writer();
writer.write_string("hello client.")?;
let mut bytes = writer.into_inner();
send(&mut server, &mut bytes).await?;
let mut reader = recv(&mut client).await?.reader();
let message = reader.read_string()?;
assert_eq!("hello client.", message);
Ok(())
}
The send process:
┌────┬────────┬────────────┐ (It may not be in contiguous memory.)
in --> │ ** │ ****** │ ********** │
└────┴────────┴────────────┘
│
│─ DeflateEncoder
v
┌──────────────────┐ (Compressed bytes. In contiguous memory.)
out <-- │ **************** │
└──────────────────┘
The recv process:
┌──────────────────┐ (Packet data.)
in --> │ **************** │
└──────────────────┘
│
│─ DeflateDecoder
v
┌────────────────────┐ (Decompressed bytes.)
out <-- │ ****************** │
└────────────────────┘
Functions§
- client_
init - Init the client side in tcp-handler compress protocol.
- client_
start - Make sure the client side is ready to use in tcp-handler compress protocol.
- recv
- Recv the message in tcp-handler compress protocol.
- send
- Send the message in tcp-handler compress protocol.
- server_
init - Init the server side in tcp-handler compress protocol.
- server_
start - Make sure the server side is ready to use in tcp-handler compress protocol.