此方法提交一个简单的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.timeout方法在任何Future上设置超时。在给定的持续时间过去之后,这将通过引发短路TimeoutException。
Future.timeout
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.connectionTimeout。设置超时后,这将适用于同一客户端发出的所有请求。当请求超过此超时时,将SocketException引发a。
HttpClient.connectionTimeout
SocketException
final client = new HttpClient(); client.connectionTimeout = const Duration(seconds: 5);