Too long network exchange

⚓ Rust    📅 2025-07-21    👤 surdeus    👁️ 1      

surdeus

Info

This post is auto-generated from RSS feed The Rust Programming Language Forum - Latest topics. Source: Too long network exchange

Hello!

I have small client - server example. I run in at local computer and send "hello world" between client-server-client and back.
Why does it take too long to exchange a phrase (40-60 ms)?

Time hist:
client to server: 1753091773111 ms
get on server: 1753091773188 ms
send from server to client: 1753091773189 ms
get on client: 1753091773190 ms

Example:

use std::time::{SystemTime, UNIX_EPOCH};

use tokio::net::{TcpListener, TcpStream};
use tokio::io::{AsyncReadExt, AsyncWriteExt, BufWriter};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Start server!");
    let listener = TcpListener::bind("127.0.0.1:8080").await?;
    loop {
        let (mut stream, _) = listener.accept().await?;
        stream.set_nodelay(true)?;
        
        let mut buf = [0; 1024];
        let n = stream.read(&mut buf).await?;
        println!("Read time: {:?}", SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis());
        let start_time = SystemTime::now();
        //println!("Get data from client: {:?}", buf);
        let mut writer = BufWriter::new(stream);
        writer.write_all(&buf[..n]).await?;
        writer.flush().await?;
        println!("Elapsed write time: {:?}", start_time.elapsed());
        println!("Send time: {:?}", SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis());
    }
}


#[cfg(test)]
mod tests {
    use std::time::{SystemTime, UNIX_EPOCH};

    use tokio::{io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream};

    #[tokio::test]
    async fn test_echo_server() {
        let mut stream = TcpStream::connect("127.0.0.1:8080").await.unwrap();
        let _ = stream.set_nodelay(true);
        let test_data = b"hello world";
        
        let start_time = SystemTime::now();
        stream.write_all(test_data).await.unwrap();
        println!("Write time: {:?}", SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis());
        println!("Elapsed write time: {:?}", start_time.elapsed());
        
        let mut buf = [0; 1024];
        let n = stream.read(&mut buf).await.unwrap();
        println!("Read time: {:?}", SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis());
        println!("Elapsed all time: {:?}", start_time.elapsed());
        
        assert_eq!(&buf[..n], test_data);
    }
}

1 post - 1 participant

Read full topic

🏷️ rust_feed