为什么原始 HTTP 请求非常慢?
Why is a raw HTTP request extremely slow?
当我尝试使用套接字发送 HTTP 请求数据包时,速度非常慢。获得回复大约需要 30 秒,而使用具有相同基本代码的任何其他语言需要 1 秒。
use std::old_io::BufferedStream;
use std::old_io::TcpStream;
fn main() {
let mut reddit = BufferedStream::new(TcpStream::connect("reddit.com:80").unwrap());
reddit.write_all(format!("GET / HTTP/1.1{0}User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 libidn/1.23 librtmp/2.3{0}Host: www.reddit.com{0}Accept: */*{0}{0}", "\r\n").as_bytes());
reddit.flush();
let reply = reddit.read_to_string().unwrap();
println!("{}", reply);
}
这是 Rust 中的错误吗?
这是因为您使用的是 allows persistent connections 的 HTTP 1.1。 30秒大概是对端服务器超时。
切换到 HTTP 1.0 或正确关闭连接,也许使用 header Connection: close
。执行其中任何一项操作都会将 运行 时间减少到 ~170 毫秒,而无需启用任何 compile-time 优化(反正在这里可能不会做太多)。
当我尝试使用套接字发送 HTTP 请求数据包时,速度非常慢。获得回复大约需要 30 秒,而使用具有相同基本代码的任何其他语言需要 1 秒。
use std::old_io::BufferedStream;
use std::old_io::TcpStream;
fn main() {
let mut reddit = BufferedStream::new(TcpStream::connect("reddit.com:80").unwrap());
reddit.write_all(format!("GET / HTTP/1.1{0}User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 libidn/1.23 librtmp/2.3{0}Host: www.reddit.com{0}Accept: */*{0}{0}", "\r\n").as_bytes());
reddit.flush();
let reply = reddit.read_to_string().unwrap();
println!("{}", reply);
}
这是 Rust 中的错误吗?
这是因为您使用的是 allows persistent connections 的 HTTP 1.1。 30秒大概是对端服务器超时。
切换到 HTTP 1.0 或正确关闭连接,也许使用 header Connection: close
。执行其中任何一项操作都会将 运行 时间减少到 ~170 毫秒,而无需启用任何 compile-time 优化(反正在这里可能不会做太多)。