Only flush on channelReadComplete(...) in http2 hello world examples.
Motivation: In our http1 hello world example we only flush on channelReadComplete(...) to make better use of gathering writes. We should do the same in http2. Modifications: Only flush in channelReadComplete(...) Result: Better performance and more consistent examples.
This commit is contained in:
parent
8adb30bbe2
commit
580ac8cd41
@ -61,10 +61,15 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
ctx.flush();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If receive a frame with end-of-stream set, send a pre-canned response.
|
* If receive a frame with end-of-stream set, send a pre-canned response.
|
||||||
*/
|
*/
|
||||||
public void onDataRead(ChannelHandlerContext ctx, Http2DataFrame data) throws Exception {
|
private static void onDataRead(ChannelHandlerContext ctx, Http2DataFrame data) throws Exception {
|
||||||
int consumed = data.padding() + data.content().readableBytes();
|
int consumed = data.padding() + data.content().readableBytes();
|
||||||
int streamId = data.streamId();
|
int streamId = data.streamId();
|
||||||
|
|
||||||
@ -82,7 +87,7 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
/**
|
/**
|
||||||
* If receive a frame with end-of-stream set, send a pre-canned response.
|
* If receive a frame with end-of-stream set, send a pre-canned response.
|
||||||
*/
|
*/
|
||||||
public void onHeadersRead(ChannelHandlerContext ctx, Http2HeadersFrame headers)
|
private static void onHeadersRead(ChannelHandlerContext ctx, Http2HeadersFrame headers)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if (headers.isEndStream()) {
|
if (headers.isEndStream()) {
|
||||||
ByteBuf content = ctx.alloc().buffer();
|
ByteBuf content = ctx.alloc().buffer();
|
||||||
@ -99,6 +104,6 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
// Send a frame for the response status
|
// Send a frame for the response status
|
||||||
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
||||||
ctx.write(new DefaultHttp2HeadersFrame(headers).streamId(streamId));
|
ctx.write(new DefaultHttp2HeadersFrame(headers).streamId(streamId));
|
||||||
ctx.writeAndFlush(new DefaultHttp2DataFrame(payload, true).streamId(streamId));
|
ctx.write(new DefaultHttp2DataFrame(payload, true).streamId(streamId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,10 +60,15 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
ctx.flush();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If receive a frame with end-of-stream set, send a pre-canned response.
|
* If receive a frame with end-of-stream set, send a pre-canned response.
|
||||||
*/
|
*/
|
||||||
public void onDataRead(ChannelHandlerContext ctx, Http2DataFrame data) throws Exception {
|
private static void onDataRead(ChannelHandlerContext ctx, Http2DataFrame data) throws Exception {
|
||||||
if (data.isEndStream()) {
|
if (data.isEndStream()) {
|
||||||
sendResponse(ctx, data.content());
|
sendResponse(ctx, data.content());
|
||||||
} else {
|
} else {
|
||||||
@ -75,7 +80,7 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
/**
|
/**
|
||||||
* If receive a frame with end-of-stream set, send a pre-canned response.
|
* If receive a frame with end-of-stream set, send a pre-canned response.
|
||||||
*/
|
*/
|
||||||
public void onHeadersRead(ChannelHandlerContext ctx, Http2HeadersFrame headers)
|
private static void onHeadersRead(ChannelHandlerContext ctx, Http2HeadersFrame headers)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if (headers.isEndStream()) {
|
if (headers.isEndStream()) {
|
||||||
ByteBuf content = ctx.alloc().buffer();
|
ByteBuf content = ctx.alloc().buffer();
|
||||||
@ -92,6 +97,6 @@ public class HelloWorldHttp2Handler extends ChannelDuplexHandler {
|
|||||||
// Send a frame for the response status
|
// Send a frame for the response status
|
||||||
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
||||||
ctx.write(new DefaultHttp2HeadersFrame(headers));
|
ctx.write(new DefaultHttp2HeadersFrame(headers));
|
||||||
ctx.writeAndFlush(new DefaultHttp2DataFrame(payload, true));
|
ctx.write(new DefaultHttp2DataFrame(payload, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,13 +60,18 @@ public class HelloWorldHttp1Handler extends SimpleChannelInboundHandler<FullHttp
|
|||||||
response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes());
|
response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes());
|
||||||
|
|
||||||
if (!keepAlive) {
|
if (!keepAlive) {
|
||||||
ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
|
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
|
||||||
} else {
|
} else {
|
||||||
response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE);
|
response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE);
|
||||||
ctx.writeAndFlush(response);
|
ctx.write(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
ctx.flush();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
|
||||||
cause.printStackTrace();
|
cause.printStackTrace();
|
||||||
|
@ -90,11 +90,8 @@ public final class HelloWorldHttp2Handler extends Http2ConnectionHandler impleme
|
|||||||
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
Http2Headers headers = new DefaultHttp2Headers().status(OK.codeAsText());
|
||||||
encoder().writeHeaders(ctx, streamId, headers, 0, false, ctx.newPromise());
|
encoder().writeHeaders(ctx, streamId, headers, 0, false, ctx.newPromise());
|
||||||
encoder().writeData(ctx, streamId, payload, 0, true, ctx.newPromise());
|
encoder().writeData(ctx, streamId, payload, 0, true, ctx.newPromise());
|
||||||
try {
|
|
||||||
flush(ctx);
|
// no need to call flush as channelReadComplete(...) will take care of it.
|
||||||
} catch (Throwable cause) {
|
|
||||||
onError(ctx, cause);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user