我有一個客戶端通過本地主機與服務器通過TCP通信。服務器在阻塞模式下使用Boost ASIO iostream。它接受傳入連接,讀取請求,發送響應並關閉套接字。問題是 - 有時服務器在通過getline首次讀取時有10-200毫秒的隨機延遲。我在服務器和客戶端的套接字上都設置了TCP_NODELAY標誌。造成這種延誤的原因是什麼?我知道,我應該在使用select之前從套接字讀取,但我預計不應該有這麼大的延遲通過本地主機。在閱讀時提升ASIO iostream隨機延遲
這裏是服務器的代碼的相關部分:
asio::io_service io_service;
ip::tcp::endpoint endpoint(bindAddress, 80);
ip::tcp::acceptor acceptor(io_service, endpoint);
for(;;)
{
ip::tcp::iostream stream;
acceptor.accept(*stream.rdbuf(), peer);
ip::tcp::no_delay no_delay(true);
stream.rdbuf()->set_option(no_delay);
string str;
getline(stream, str); // at this line i get random delays
//the main part of code
}
我有大約200請求/秒,延遲發生每分鐘幾次。netstat -m顯示有足夠的緩衝區。
UPDATE:
它看起來像客戶端的問題,而不是服務器:回答這個問題,關閉它的緣故Apache HttpClient random delays under high requests/second
我總是隻有一個連接到服務器,但我看到這延遲無論如何。 – Michael 2011-05-27 21:55:53