0

我希望你能帮助我。我对飞镖并不完全陌生,因为我已经设置了颤振应用程序的主要部分。但是我的应用程序需要一个后端服务器,我认为 dart 服务器会很方便,因为我喜欢 dart 语言。于是我搭建了一个运行 Ubuntu 的普通在线服务器,并开始使用 VS Code SSH Remote 进行开发。我需要我的服务器刷新和重组其存储的数据,以便我的应用程序可以轻松获取数据。昨天我尝试下载必要的 .csv 文件,一切正常。今天,HTTPClient 继续加载。

我的代码:

refreshData() {
  refresh() async {
    print('refreshing data...');
    var client = await Client()
        .send(Request('GET', Uri.parse(articlesUrl)))
        .timeout(Duration(seconds: 45));
    int total = client.contentLength ?? 0;
    int received = 0;
    client.stream.listen((value) {
      bytes.addAll(value);
      received += value.length;
      print('Received: ' + received.toString() + 'of: ' + total.toString());
    }).onDone(() async {
      await File('assets/data/articles.csv').writeAsBytes(bytes);
      print('file written.');
    });
  }

  refresh();
  const timer = Duration(minutes: 30);
  Timer.periodic(timer, (Timer t) async {
    refresh();
  });
}

代码一直执行到 print('refreshing data...') 正常,然后我完全不知道会发生什么。即使超时功能不起作用,监听功能也不起作用。但我没有抛出任何异常或错误。我也尝试将 Dio 包作为 HTTP 客户端,但它保持不变。另一台服务器上的文件可以正常访问,就像以前一样,curl 报告我从中获取文件的服务器没有问题。端口空闲,HTTPServer 报告没有问题。

有人有同样的问题吗,或者你知道如何正确调试,所以我可以看到 HTTPClient 在做什么?

4

1 回答 1

0

一些东西

  1. 你不是close客户。并且您每次调用都会创建一个refresh

我会创建一个客户。

  1. 您无需等待流完成。我宁愿await client.stream.forEach不听。

这些东西可能会帮助您调试

于 2022-01-13T22:14:47.367 回答