Module tcp_handler::compress

source ·
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.

§Example

use anyhow::Result;
use bytes::{Buf, BufMut, BytesMut};
use flate2::Compression;
use tcp_handler::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, 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, Compression::default()).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, Compression::default()).await?;

    let mut reader = recv(&mut client).await?.reader();
    let message = reader.read_string()?;
    assert_eq!("hello client.", message);

    Ok(())
}

This protocol is like this:

        ┌────┬────────┬────────────┐ (It may not be in contiguous memory.)
in  --> │ ** │ ****** │ ********** │
        └────┴────────┴────────────┘
          │
          │─ DeflateEncoder
          v
        ┌────────────────────┐ (Compressed bytes. In contiguous memory.)
out <-- │ ****************** │
        └────────────────────┘

Functions§

  • Init the client side in tcp-handler compress protocol.
  • Make sure the client side is ready to use in tcp-handler compress protocol.
  • Recv message in compress tcp-handler protocol.
  • Send message in compress tcp-handler protocol.
  • Init the server side in tcp-handler compress protocol.
  • Make sure the server side is ready to use in tcp-handler compress protocol.