클라이언트가 로컬 호스트를 통해 TCP로 서버와 통신하고 있습니다. 서버는 차단 모드에서 부스트 ASIO iostream을 사용합니다. 들어오는 연결을 받아들이고, 요청을 읽고, 응답을 보내고 소켓을 닫습니다. 문제는 - 때로는 서버가 getline을 통해 첫 번째 읽기에서 10-200 밀리 초 동안 임의의 지연이 있음을 나타냅니다. 나는 서버와 클라이언트 소켓 모두에 TCP_NODELAY 플래그를 설정했다. 이 지연의 원인은 무엇입니까? 나는 소켓에서 읽기 전에 select를 사용해야한다는 것을 알고 있지만 localhost를 통해 그렇게 큰 지연이 있어서는 안된다고 예상했다.읽기 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