사용중인 라이브러리에 문제가 있습니다. 라이브러리 일 수도 있고 잘못 사용했을 수도 있습니다!
기본적 으로이 작업을 수행 할 때 (밀리 초 단위의 시간 초과)
_ignitedHttp.setConnectionTimeout(1); // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds
시간 초과 예외가 생성되지 않고 정상적으로 작동하지만 다음을 수행하면
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short
소켓 예외가 발생합니다.
그래서 내 질문은 왜 연결 예외를 시뮬레이션 할 수 없습니까? 소켓과 연결 시간 초과의 차이점을 오해하고 있습니까? 도서관은 여기에 있습니다 (아직 공식적으로 공개되지는 않음).
답변
연결 시간 초과는 단지 TCP 연결을 시작할 때 발생합니다. 일반적으로 원격 시스템이 응답하지 않는 경우에 발생합니다. 이는 서버가 종료되었거나 잘못된 IP / DNS 이름을 사용했거나 포트가 잘못되었거나 서버와의 네트워크 연결이 끊 겼음을 의미합니다.
소켓 제한 시간은 연속 들어오는 데이터 흐름을 모니터링하기 위해 최선을 다하고 있습니다. 지정된 시간 초과 동안 데이터 흐름이 중단되면 연결이 중단 / 중단 된 것으로 간주됩니다. 물론 이것은 항상 데이터가 수신되는 연결에서만 작동합니다.
소켓 제한 시간을 1로 설정하면 매 밀리 초마다 새 데이터를 수신해야합니다 (데이터 블록을 현명하게 읽고 블록이 충분히 크다고 가정)!
들어오는 스트림 만 밀리 초 이상 정지하면 시간 초과가 발생하는 것입니다.
답변
접속 타임 아웃 프로그램 설정에 다른 프로세스로의 연결을 기다릴 것이 최대 시간이다. 이 시점에서 애플리케이션 데이터를 얻거나 게시하지 않고 연결 자체를 설정하기 만하면됩니다.
소켓 타임 아웃은 개별 패킷을 기다리는 시간 제한입니다. 소켓 제한 시간이 전체 응답을 수신하기위한 제한 시간이라는 것은 일반적인 오해입니다. 따라서 소켓 시간 종료가 1 초이고 3 개의 IP 패킷으로 구성된 응답이 있고 각 응답 패킷이 도달하는 데 0.9 초가 걸리고 총 응답 시간이 2.7 초인 경우 시간 종료가 없습니다.