/
Push.java
52 lines (41 loc) · 1.72 KB
/
Push.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package ch.rasc.httpclient;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.net.http.HttpResponse.PushPromiseHandler;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;
public class Push {
public static void main(String[] args) {
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("https://localhost:8443/indexWithoutPush"))
.build();
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join(); // only for demo purposes, blocks calling thread
request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("https://localhost:8443/indexWithPush"))
.build();
var asyncRequests = new CopyOnWriteArrayList<CompletableFuture<Void>>();
PushPromiseHandler<byte[]> pph = (initial, pushRequest, acceptor) -> {
CompletableFuture<Void> cf = acceptor.apply(BodyHandlers.ofByteArray())
.thenAccept(response -> {
System.out.println("Got pushed resource: " + response.uri());
System.out.println("Body: " + response.body());
});
asyncRequests.add(cf);
};
client.sendAsync(request, BodyHandlers.ofByteArray(), pph)
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
// block calling thread for demo purposes
asyncRequests.forEach(CompletableFuture::join);
}
}