作者:超级冷笑话驿站料_663 | 来源:互联网 | 2022-12-09 18:45
此方法提交一个简单的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-app或多或少会立即调用errorCallback.
在iOS上,errorCallback需要很长一段时间 - 超过20秒 - 直到调用任何回调.
我可以为HttpClient()设置一个等待服务器端返回回复的最大秒数 - 如果有的话?
1> Jonah Willia..:
在Dart中有两种不同的方法来配置此行为
设置每个请求超时
您可以使用该Future.timeout
方法在任何Future上设置超时.这将在给定的持续时间过去之后通过投掷a来短路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);