user2924127:
私が使用してアウトラインのすべての偉大な例を見つけることができていないJava
の新しいHTTP2
サポートを。
Javaの以前のバージョンの(でJava 8
)私はに多くのコール作っていたREST
複数のスレッドを使用してサーバを。
私は、パラメータのグローバルリストを持っていたと私は要求の異なる種類を作るためのパラメータを通過します。
例えば:
String[] params = {"param1","param2","param3" ..... "paramSomeBigNumber"};
for (int i = 0 ; i < params.length ; i++){
String targetURL= "http://ohellothere.notarealdomain.commmmm?a=" + params[i];
HttpURLConnection connection = null;
URL url = new URL(targetURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.close();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
//Do some stuff with this specific http response
}
私はどうなるのか、前のコードでは、複数の構築物であるHTTP
パラメータでほんの少しの変化で同じサーバに要求を。これは、各スレッドはのparam配列のいくつかの塊に働くだろうように、私もスレッドを使用して仕事を壊すので、完了するまでにしばらく時間がかかりました。
HTTP2
私は今、ブランドの新しい接続を毎回作成する必要はありません。問題は、私はかなりのJavaの新しいバージョンを(使用して、これを実装する方法を理解していないですJava 9 - 11
)。
私がそうであるように、私は、配列のparamを持っている場合は、以前にどのように私は次のようにします:
1) Re-use the same connection?
2) Allow different threads to use the same connection?
基本的に私は、私が以前にやったが、今利用して何をすべきかの例を探していますHTTP2
。
よろしく
ジェイコブ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
それがコールバックで受信されたとき)。