这个方法提交一个简单的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
进行短路。
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.connectionTimeout
设置 HttpClient 本身的超时时间。 .在设置超时后,这将适用于同一客户端发出的所有请求。当请求超过此超时时间时,将抛出 SocketException
。
final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 5);
https://stackoverflow.com/questions/51487818/
相关文章:
visual-studio-code - VS Code(OSX)Flutter热重载不是由保存触发
dart - 输入文本时自动扩展的 Flutter 文本字段,然后在达到特定高度时开始滚动文本
android - flutter 上的图像比例类型中心裁剪?
dart - Flutter 测试 MissingPluginException
animation - 在 Flutter 中将 ListView 项目动画化为全屏
http - 在flutter http请求中为所有请求设置默认 header 的最佳方法
ios - flutter IOS : CocoaPods could not find compa
android - 如何在 Flutter 中创建可扩展的 ListView