http - 为什么原始 HTTP 请求非常慢?

标签 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 中的错误吗?

最佳答案

这是因为您使用的是 HTTP 1.1,allows persistent connections . 30秒大概是对端服务器的超时。

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

关于http - 为什么原始 HTTP 请求非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795609/

相关文章:

http - 如何将 net/http.ResponseWriter 转换为 net/http.Response

angularjs - 向 Firebase 发出待处理请求的可能原因是什么?

rust - GDB + Rust,如何打印std::path::Path函数调用

javascript - 使 cookie 过期

java - 如何在 Android 中发起 http get 请求

json - Blogger API 缺少内容数据

rust - 特征可以作为 Fn 引用或闭包传递吗

rust - 类型不匹配的错误 : Option<&[u8]> and Option<&[u8;32]>

rust - 在重新分配的情况下,Rust 什么时候删除该值?

performance - 如何使rust代码并行运行更快?