api - 为 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 秒 - 直到调用任何回调。

我可以为 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 上设置超时

您也可以使用 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

firebase - 从 Flutter 中的 Firestore 集合中获取所有内容

flutter - 如何在不改变 AppBar 的情况下更改 TabBar 的背景颜色?