I am wondering how to send the HTTP/2 requests at the same time. According to the jetty example code for HTTP/2 client code. They use the phaser to listen the frames. when I use a for loop, for example
for(int i=0;i<childpath.size();i++)
{
MetaData.Request metaData = new MetaData.Request("GET", new HttpURI("https://"+host+":"+port+"/"+childpath.get(i)), HttpVersion.HTTP_2, requestFields);
PriorityFrame tempPriorityFrame = null;
HeadersFrame headersFrame = new HeadersFrame(0, metaData, tempPriorityFrame, true);
final Phaser phaser = new Phaser(2);
session.newStream(headersFrame, new Promise.Adapter<Stream>(), new Stream.Listener.Adapter()
{
@Override
public void onHeaders(Stream stream, HeadersFrame frame)
{
System.err.println(frame);
if (frame.isEndStream())
phaser.arrive();
}
@Override
public void onData(Stream stream, DataFrame frame, Callback callback)
{
System.err.println(frame);
callback.succeeded();
if (frame.isEndStream())
phaser.arrive();
}
@Override
public Stream.Listener onPush(Stream stream, PushPromiseFrame frame)
{
System.err.println(frame);
phaser.register();
return this;
}
});
phaser.awaitAdvanceInterruptibly(phaser.arrive(), 5, TimeUnit.SECONDS);
}
I found only when the first frame's response being heared and a dataframe with end=true being heared then the second request can be made.
Does anyone know how to send the request at the same time without waiting for the former request's response. Many Thanks
Best Regards
Muhui Jiang