【发布时间】:2021-08-09 12:17:30
【问题描述】:
我有一个 Java 程序,它使用 Java 11 HttpClient 向服务器发送数百个 GET 请求,它需要每分钟执行 2-3 次。目前,它执行以下操作(仅描述逻辑):
for each request that needs to be sent:
//build GET request
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
futures.add(future)
// for every 100 request, sleep for 2500 milliseconds (to wait for responses)
for each future in futures:
// parse JSON response
代码大部分工作正常,但是,它受到互联网连接强度的严重影响,好像它很糟糕,80% 的请求没有得到响应,因为等待时间不够。
问题是这是否是正确的方法,如果不是,它会是什么。另外,我是否应该等待所有请求得到响应(例如同步发送请求并使用 .join()),如果是,我该怎么做。
【问题讨论】:
-
你需要睡觉吗?那会阻塞线程。你可以直接发出你的请求然后忘记吗?所以解雇所有 100 个,还是调用相互依赖?
-
@SusanMustafa 我正在使用 sleep 来等待请求的响应,否则他们将没有时间得到响应
标签: java http asynchronous get connectivity