设置HTTPClient get()请求的超时

此方法提交一个简单的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秒-直到调用任何回调。

回答:

有两种不同的方法可以在Dart中配置此行为

设置每个请求超时

您可以使用Future.timeout方法在任何Future上设置超时。在给定的持续时间过去之后,这将通过引发短路TimeoutException

try {

final request = await client.get(...);

final response = await request.close()

.timeout(const Duration(seconds: 2));

// rest of the code

...

} on TimeoutException catch (_) {

// A timeout occurred.

} on SocketException catch (_) {

// Other exception

}

在HttpClient上设置超时

您还可以使用设置HttpClient本身的超时时间HttpClient.connectionTimeout。设置超时后,这将适用于同一客户端发出的所有请求。当请求超过此超时时,将SocketException引发a。

final client = new HttpClient();

client.connectionTimeout = const Duration(seconds: 5);

以上是 设置HTTPClient get()请求的超时 的全部内容, 来源链接: utcz.com/qa/428148.html

回到顶部