22
33import java .util .concurrent .ScheduledExecutorService ;
44
5+ import io .netty .buffer .ByteBuf ;
6+ import io .netty .buffer .Unpooled ;
57import io .netty .channel .ChannelInitializer ;
68import 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
1511public 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