Skip to content

Commit dd2e890

Browse files
committed
Further optimize encoding
1 parent e8f2df7 commit dd2e890

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

frameworks/Java/netty/src/main/java/hello/HelloServerInitializer.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
import java.util.concurrent.ScheduledExecutorService;
44

5+
import io.netty.buffer.ByteBuf;
6+
import io.netty.buffer.Unpooled;
57
import io.netty.channel.ChannelInitializer;
68
import io.netty.channel.socket.SocketChannel;
7-
import io.netty.handler.codec.http.DefaultFullHttpResponse;
8-
import io.netty.handler.codec.http.DefaultHttpRequest;
9-
import io.netty.handler.codec.http.HttpMessage;
10-
import io.netty.handler.codec.http.HttpMethod;
11-
import io.netty.handler.codec.http.HttpRequestDecoder;
12-
import io.netty.handler.codec.http.HttpResponseEncoder;
13-
import io.netty.handler.codec.http.HttpVersion;
9+
import io.netty.handler.codec.http.*;
1410

1511
public class HelloServerInitializer extends ChannelInitializer<SocketChannel> {
1612

@@ -21,6 +17,28 @@ public HelloServerInitializer() {
2117
public void initChannel(SocketChannel ch) throws Exception {
2218
ch.pipeline()
2319
.addLast("encoder", new HttpResponseEncoder() {
20+
21+
private ByteBuf encodedHeaders;
22+
private HttpHeaders lastSeenHeaders;
23+
24+
@Override
25+
protected void encodeHeaders(HttpHeaders headers, ByteBuf buf) {
26+
if (lastSeenHeaders != headers) {
27+
updateEncodedHttpHeaders(headers, buf);
28+
}
29+
encodedHeaders.getBytes(encodedHeaders.readerIndex(), buf, encodedHeaders.readableBytes());
30+
}
31+
32+
private void updateEncodedHttpHeaders(HttpHeaders headers, ByteBuf buf) {
33+
if (encodedHeaders == null) {
34+
encodedHeaders = Unpooled.buffer(buf.writableBytes());
35+
} else {
36+
encodedHeaders.clear().ensureWritable(buf.writableBytes());
37+
}
38+
super.encodeHeaders(headers, encodedHeaders);
39+
lastSeenHeaders = headers;
40+
}
41+
2442
@Override
2543
public boolean acceptOutboundMessage(final Object msg) throws Exception {
2644
if (msg.getClass() == DefaultFullHttpResponse.class) {

0 commit comments

Comments
 (0)