#frame #tcp #server

tcpserver

rust tcp server frame

40 releases (19 stable)

2.2.0 Jan 21, 2025
2.0.0 Jan 18, 2024
1.6.1 Apr 20, 2023
1.6.0 Mar 20, 2022
0.1.5 Oct 30, 2020

#1167 in Network programming

Download history 1/week @ 2024-11-24 9/week @ 2024-12-01 65/week @ 2024-12-08 7/week @ 2024-12-15 211/week @ 2025-01-19 11/week @ 2025-01-26 58/week @ 2025-02-02 79/week @ 2025-02-09 8/week @ 2025-02-16 10/week @ 2025-02-23 20/week @ 2025-03-02 15/week @ 2025-03-09

53 downloads per month
Used in 3 crates (via netxserver)

MIT/Apache

17KB
338 lines

#rust tcp server frame.

  • Version 2.+ Minimum supported Rust version: 1.75 or later

client crate url

Examples Echo

use anyhow::Result;
use std::sync::Arc;
use tcpserver::{Builder, IPeer, ITCPServer};
use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main() -> Result<()> {
    let tcpserver: Arc<dyn ITCPServer<()>> = Builder::new("0.0.0.0:5555")
        .set_connect_event(|addr| {
            println!("{:?} connect", addr);
            true
        })
        .set_stream_init(|tcp_stream| async move { Ok(tcp_stream) })
        .set_input_event(|mut reader, peer, _| async move  {
            let mut buff = [0; 4096];
            while let Ok(len) = reader.read(&mut buff).await {
                if len == 0 {
                    break;
                }
                peer.send_ref(buff[..len].to_vec()).await?;
            }
            println!("{:?} disconnect", peer.addr());
            Ok(())
        })
        .build()
        .await;
    tcpserver.start_block(()).await?;
    Ok(())
}

Dependencies

~3–13MB
~134K SLoC