作者:tuuowu | 来源:互联网 | 2022-11-19 10:45
我没有找到任何很好的例子来概述使用Java
新的HTTP2
支持.
在以前的Java(Java 8
)版本中,我REST
使用多个线程对服务器进行了多次调用.
我有一个全局参数列表,我会通过参数来做出不同类型的请求.
例如:
String[] params = {"param1","param2","param3" ..... "paramSomeBigNumber"};
for (int i = 0 ; i
在前面的代码中,我要做的是HTTP
只需对参数进行一点改动即可构建对同一服务器的多个请求.这需要一段时间才能完成,所以我甚至会使用线程分解工作,这样每个线程都可以在param数组的一些块上工作.
随着HTTP2
我现在就不必每次都创建一个全新的连接.问题是我不太明白如何使用新版本的Java(Java 9 - 11
)来实现它.
如果我像以前一样有一个数组参数,我将如何执行以下操作:
1) Re-use the same connection?
2) Allow different threads to use the same connection?
基本上我正在寻找一个例子来做我以前做过但现在正在使用的东西HTTP2
.
问候
1> Jacob G...:
这需要一段时间才能完成,所以我甚至会使用线程分解工作,这样每个线程都可以在param数组的一些块上工作.
使用Java 11 HttpClient
,这实际上非常简单; 您只需要以下代码段:
var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
String[] params = {"param1", "param2", "param3", "paramSomeBigNumber"};
for (var param : params) {
var targetURL = "http://ohellothere.notarealdomain.commmmm?a=" + param;
var request = HttpRequest.newBuilder().GET().uri(new URI(targetURL)).build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.whenComplete((response, exception) -> {
// Handle response/exception here
});
}
这使用HTTP/2异步发送请求,然后在回调中接收响应时处理响应String
(或Throwable
).
请求是异步发送的,我怀疑你的程序在收到响应之前就已退出(因为主线程终止).要解决此问题,您可以使用自定义`ExecutorService`并阻止主线程直到收到响应,或者更改代码以使用`send`代替,这是阻塞并且不使用多个线程.