为什么原始HTTP请求速度极慢?

时间:2015-03-01 15:55:36

标签: http rust

当我尝试使用套接字发送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的错误吗?

1 个答案:

答案 0 :(得分:3)

这是因为您使用的是HTTP 1.1,allows persistent connections。 30秒可能是另一端服务器的超时。

切换到HTTP 1.0或正确关闭连接,可能使用标头Connection: close。执行其中任何一项操作都可以将运行时间缩短到大约170毫秒,而无需启用任何编译时优化(无论如何这可能都不会做太多)。