dart 在Flutter中建立连接后增加空闲时间

zaqlnxep  于 5个月前  发布在  Flutter
关注(0)|答案(1)|浏览(38)

1.如果建立了连接,它将在15秒后关闭(如果我错了,请告诉我连接关闭的时间),并且空闲时间不能延长。在我的情况下,向同一个域发出多个请求,需要持久连接,这意味着即使在15秒后也要保持连接。是否有其他属性可以用来实现这一点?
1.在建立连接之前,如果发出多个请求,则每个请求都需要花费时间来建立连接。有没有方法可以避免这种情况,并减少所有请求所花费的时间?例如,在下面的屏幕截图中,在建立连接之前,向同一个域发出4个请求,每个请求需要大约2秒来建立连接。有没有方法可以减少这个时间?
注意:我尝试使用httphttp_client_helper


的数据
1.但在某些情况下,当一个请求在连接建立后的15秒内被提出时,连接再次重新建立,请提供一些建议。下面是我使用http_client_helper的代码片段。


更新1

图像1

图像2

o4hqfura

o4hqfura1#

在响应上设置一个超时,它是一个Future可以帮助你做到这一点。

final Response response = await HttpClientHelper(...).timeout(const Duration(seconds: 20));

字符串
This linked answer给出了更多关于处理连接超时和每个请求的细节。如果它回答了你的问题,请告诉我。

更新

正如Dharanidharan所指出的,上面的建议让你处理建立连接所需的时间。为了在连接建立后管理idleTime,我们需要使用HttpClient类。这让我们可以访问底层功能:
注意事项:HttpClient提供底层HTTP功能。我们建议用户从package:http中找到的更易于开发人员使用且可组合的API开始。
正如OP关于空闲时间的声明,The default value is 15 seconds.但是使用HttpClient类的空闲时间属性允许我们修改这个值。

HttpClient client = HttpClient();

  Future<String> get(String url) async {
    String responseJson;

    try {
      client.idleTimeout = const Duration(minutes: 5);

      // first future
      // make a request to the url
      HttpClientRequest request = await client.getUrl(Uri.parse(baseUrl + url));

      // second future
      // close the request to get the response data
      HttpClientResponse response = await request.close();

      // Process the response stream from the request
      final stringData = await response.transform(utf8.decoder).join();

      // Manage the processed response
      responseJson = _response(stringData);
    } on SocketException {
      throw FetchDataException('');
    } on ClientException {
      throw FetchDataException('');
    } catch (e) {
      setState(() {
        responseJson = e.toString();
      });
    }

    return responseJson;
  }


上面的解决方案将空闲时间从默认的15秒更改为5分钟。您可以阅读更多关于制作简单的GET请求以了解与Helper类交互的不同方式。
以下是Dartpad上的完整代码示例,供任何想要快速构建测试的人使用。(由于导入问题,可能无法直接在Dartpad中工作)。

相关问题