반응형
질문
이 방법은 간단한 HTTP 요청을 제출하고 성공 또는 오류 콜백을 호출합니다:
void _getSimpleReply( String command, callback, errorCallback ) async {
try {
HttpClientRequest request = await _myClient.get( _serverIPAddress, _serverPort, '/' );
HttpClientResponse response = await request.close();
response.transform( utf8.decoder ).listen( (onData) { callback( onData ); } );
} on SocketException catch( e ) {
errorCallback( e.toString() );
}
}
서버가 실행되지 않으면 Android 앱은 거의 즉시 errorCallback를 호출합니다.
iOS에서는 errorCallback가 호출되기까지 매우 오랜 시간이 걸립니다 - 20초 이상.
HttpClient()에 서버 측에서 응답을 반환하기까지 기다릴 최대 시간을 설정할 수 있을까요?
답변
이 동작을 구성하는 두 가지 다른 방법이 있습니다
요청별 타임아웃 설정
Future를 사용하여 Future.timeout
메서드를 사용하여 임의의 Future에 타임아웃을 설정할 수 있습니다. 이렇게 하면 지정된 기간이 경과하면 TimeoutException
이 발생하여 중단됩니다.
try {
final request = await client.get(...);
final response = await request.close()
.timeout(const Duration(seconds: 2));
// 나머지 코드
...
} on TimeoutException catch (_) {
// 타임아웃이 발생했습니다.
} on SocketException catch (_) {
// 다른 예외
}
HttpClient에 타임아웃 설정
HttpClient 자체에도 HttpClient.connectionTimeout
을 사용하여 타임아웃을 설정할 수 있습니다. 이렇게 하면 타임아웃이 설정된 후 동일한 클라이언트에 의해 수행되는 모든 요청에 적용됩니다. 요청이 이 타임아웃을 초과하면 SocketException
이 발생합니다.
final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 5);
반응형
댓글