此方法提交一个简单的 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() 设置等待服务器端返回回复的最大秒数 - 如果有的话?
在 Dart 中配置此行为有两种不同的方法
设置每个请求的超时时间
您可以使用以下命令在任何 Future 上设置超时Future.timeout https://api.dartlang.org/dev/2.0.0-dev.69.2/dart-async/Future/timeout.html方法。这将在给定的持续时间过后通过抛出一个短路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 https://api.dartlang.org/dev/2.0.0-dev.69.2/dart-io/HttpClient/connectionTimeout.html。设置超时后,这将适用于同一客户端发出的所有请求。当请求超过此超时时,SocketException
被抛出。
final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 5);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)