【发布时间】:2020-03-16 21:12:35
【问题描述】:
在我的颤振应用程序中使用http 包时,我遇到了一个小问题。我正在本地主机上进行测试,当我使用 http.post 在数据库中发布某些内容时,当服务器未运行时,它不会在默认时间(即我认为是 60 秒)返回响应。当我在超时内启动 apache 和 mysql 服务时,它会将数据发布到服务器中。有什么办法可以减少dart http包中http请求的超时时间?或者有什么替代方案吗?
【问题讨论】:
在我的颤振应用程序中使用http 包时,我遇到了一个小问题。我正在本地主机上进行测试,当我使用 http.post 在数据库中发布某些内容时,当服务器未运行时,它不会在默认时间(即我认为是 60 秒)返回响应。当我在超时内启动 apache 和 mysql 服务时,它会将数据发布到服务器中。有什么办法可以减少dart http包中http请求的超时时间?或者有什么替代方案吗?
【问题讨论】:
这是 http 包
final response = await http.post(Url).timeout(Duration(seconds: 5));
这是 Dio 包(建议测试此包)
BaseOptions options = new BaseOptions(
baseUrl: baseUrl,
connectTimeout: 10000, //10 seconds
receiveTimeout: 10000,
);
Dio dio = new Dio(options);
Response<dynamic> response = await dio.post(url, data: mapData);
【讨论】:
您有两种选择。
减少 HttpClient 的超时时间
final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 10);
这将适用于同一客户端发出的所有请求。如果请求超过此超时,则抛出SocketException。
设置每个请求的超时时间
您可以使用 Future.timeout 方法为任何 Future 设置超时。
try {
..
final request = await client.get(...);
final response = await request.close().timeout(const Duration(seconds: 10));
// more code
} on TimeoutException catch (e) {
// handle timeout
}
【讨论】: