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
🏷️ rust_feed