Having finished the test according to your hint. The results seems good. The h2o is trying to send back all the dataframes of A before send the headersframe of B & C. But sometimes if A is too large, A won't be the first one finished. I think this exactly reflect the feature of priority.
And I have also tried the exclusive flag. It can also works.
By the way, if I just override the ondata, onheader function in the Adapter without using phaser. Do you think this will influence or not? I got the result above from the log of my server. But the client can not print all the information till all the frames finished.
session.newStream(new HeadersFrame(metaDataA, null, true), new Promise<Stream>()
{
@Override
public void succeeded(Stream stream)
{
// Now we have the streamId.
int streamIdA = stream.getId();
System.out.println(streamIdA);
MetaData.Request metaDataB = new MetaData.Request("GET", new HttpURI("https://"+host+":"+port+"/"+childpath.get(1)), HttpVersion.HTTP_2, requestFields);
session.newStream(new HeadersFrame(metaDataB, new
PriorityFrame(streamIdA, 1, false), true), new
Promise.Adapter<>(), new Stream.Listener.Adapter() {
@Override
public void onHeaders(Stream stream, HeadersFrame frame) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(1));
}
@Override
public Listener onPush(Stream stream, PushPromiseFrame frame) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(1));
return this;
}
@Override
public void onData(Stream stream, DataFrame frame,
Callback callback) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(1));
}
});
MetaData.Request metaDataC = new MetaData.Request("GET", new HttpURI("https://"+host+":"+port+"/"+childpath.get(2)), HttpVersion.HTTP_2, requestFields);
session.newStream(new HeadersFrame(metaDataC, new
PriorityFrame(streamIdA, 256, false), true), new
Promise.Adapter<>(), new Stream.Listener.Adapter() {
@Override
public void onHeaders(Stream stream, HeadersFrame frame) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(2));
}
@Override
public Listener onPush(Stream stream, PushPromiseFrame frame) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(2));
return this;
}
@Override
public void onData(Stream stream, DataFrame frame,
Callback callback) {
// TODO Auto-generated method stub
System.err.println(frame+childpath.get(2));
}
});
Just like my childpath here:
childpath.add("img/clink/clinklittle128.png");
childpath.add("js/preloadjs.min.js");
childpath.add("index.html");
childpath.add("css/infocard.css");
The result:
HeadersFrame@66f8ef24#1{end=false}
DataFrame@194fa782#1{length:1294,end=false}
DataFrame@41fda58b#1{length:1400,end=false}
DataFrame@4d402512#1{length:1400,end=false}
DataFrame@62eb2312#1{length:1400,end=false}
DataFrame@6fceb7a#1{length:1400,end=false}
DataFrame@2a81c7d3#1{length:1400,end=false}
DataFrame@66a50f24#1{length:1400,end=false}
DataFrame@5d6d5351#1{length:1400,end=false}
DataFrame@3c2bd4bd#1{length:1400,end=false}
DataFrame@183033b4#1{length:1400,end=false}
DataFrame@5622d3b9#1{length:1400,end=false}
DataFrame@6162f5f7#1{length:1090,end=false}
DataFrame@38e5b5a#1{length:301,end=false}
DataFrame@1a3a750c#1{length:1400,end=false}
DataFrame@5ac5c2e9#1{length:1400,end=false}
DataFrame@2cfe590b#1{length:1400,end=false}
DataFrame@5d5b8345#1{length:1400,end=false}
DataFrame@14801ff7#1{length:1400,end=false}
DataFrame@60a65504#1{length:1400,end=false}
DataFrame@3e4e6e1a#1{length:1400,end=false}
DataFrame@3f0e933d#1{length:1400,end=false}
DataFrame@2be55c8c#1{length:1400,end=false}
DataFrame@79b92281#1{length:1400,end=false}
DataFrame@344aad12#1{length:1400,end=false}
DataFrame@7f1657dd#1{length:683,end=false}
DataFrame@7e16658f#1{length:708,end=false}
DataFrame@4e0bede6#1{length:1400,end=false}
DataFrame@2fc8eb08#1{length:1400,end=false}
DataFrame@62adf993#1{length:1400,end=false}
DataFrame@2f5ac254#1{length:1400,end=false}
DataFrame@3eaf7e84#1{length:1400,end=false}
DataFrame@565752f2#1{length:1400,end=false}
DataFrame@5bbb48ca#1{length:1400,end=false}
DataFrame@220a698b#1{length:1400,end=false}
DataFrame@67947810#1{length:1400,end=false}
DataFrame@b3876d2#1{length:1400,end=false}
DataFrame@a449267#1{length:1400,end=false}
DataFrame@7bf3f495#1{length:276,end=false}
DataFrame@3f635703#1{length:1115,end=false}
DataFrame@772528db#1{length:1400,end=false}
DataFrame@595c5bf2#1{length:1400,end=false}
DataFrame@3def4b10#1{length:1400,end=false}
DataFrame@1891d8e1#1{length:1400,end=false}
DataFrame@46ac58d8#1{length:1400,end=false}
DataFrame@7d140834#1{length:1400,end=false}
DataFrame@3ae46b4d#1{length:1400,end=false}
DataFrame@2ca4fa20#1{length:1400,end=false}
DataFrame@86a1df4#1{length:1400,end=false}
DataFrame@5562e165#1{length:1400,end=false}
DataFrame@4c455687#1{length:1268,end=false}
HeadersFrame@47bbc0d5#3{end=false}js/preloadjs.min.js
HeadersFrame@1f66f06b#5{end=false}index.html
HeadersFrame@5d4d532b#7{end=false}css/infocard.css
Best Regards
Muhui Jiang