fzy*_*cjy 12 http dart flutter
我需要为http请求设置超时。
我已阅读Set timeout for HTTPClient get() request,它建议我们使用 http.get(...).timeout(...).
然而,我担心:那.timeout是课堂上的方法Future。因此,即使超时,http请求仍然持续进行!换句话说,如果 http 请求实际上需要 30 秒才能完成,并且我们使用timeout(Duration(seconds: 5)),那么即使看起来我们已经中止了请求,但实际上仍然花费了用户手机的资源另外 25 秒秒。
因此,如果有适当的方法来超时请求,我将不胜感激。或者,如果我错了,请纠正我。
PS我知道还有一件事,HttpClient.connectionTimeout。这是连接阶段,而不是整个请求的时间。有趣的是,当我查看这里的源代码时,我发现它也在some_future.timeout()内部使用。因此,恕我直言,超时时也不会释放资源。
jam*_*lin 13
使用 的原始HttpClientAPI ,您可以在超时时dart:io通过调用来取消 HTTP 请求:HttpClientRequest.abortFuture
import 'dart:async';
import 'dart:io' as io;
Future<void> main(List<String> args) async {
var slowUrl = args.first;
var httpClient = io.HttpClient();
var request = await httpClient.getUrl(Uri.parse(slowUrl));
try {
var response = await request
.close()
.then(
(_) => print('Got eventual response'),
)
.timeout(
const Duration(seconds: 1),
);
} on TimeoutException catch (_) {
print('Timed out');
request.abort();
}
}
Run Code Online (Sandbox Code Playgroud)
当使用响应缓慢的 URL 运行时,上面的内容应该打印“超时”而不是“得到最终响应”。
然而,HttpClientRequest.abort(截至撰写本文时)是最近添加的,目前它还没有在package:http.
| 归档时间: |
|
| 查看次数: |
6035 次 |
| 最近记录: |