2015-03-01 4 views
0

Когда я пытаюсь отправить пакеты запросов HTTP с использованием сокетов, он очень медленный. Чтобы получить ответ, требуется около 30 секунд, тогда как на любом другом языке с тем же базовым кодом требуется 1 секунда.Почему простой HTTP-запрос очень медленный?

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); 
} 

Это ошибка в ржавчине?

ответ

3

Это потому, что вы используете HTTP 1.1, который allows persistent connections. 30 секунд - это, вероятно, тайм-аут сервера на другом конце.

Переключиться на HTTP 1.0 или правильно закрыть соединение, возможно, используя заголовок Connection: close. Выполнение любого из них сокращает время работы до ~ 170 мс, не позволяя оптимизировать время компиляции (что, вероятно, не так много здесь).

Смежные вопросы