【Netty源码解读和权威指南】第86篇:Netty HTTP/2支持——多路复用的Web未来

上一篇【第85篇】Netty异常处理机制——exceptionCaught的正确使用姿势
下一篇【第87篇】Netty Proxy Protocol支持——获取真实客户端IP


一、HTTP/2 vs HTTP/1.1

特性HTTP/1.1HTTP/2
连接每请求一个连接一个连接多个Stream
多路复用
头部压缩✅ (HPACK)
服务器推送
二进制帧

二、Netty HTTP/2服务器

publicclassHttp2Server{publicstaticvoidmain(String[]args)throwsException{SslContextsslCtx=SslContextBuilder.forServer(...).build();EventLoopGroupboss=newNioEventLoopGroup(1);EventLoopGroupworker=newNioEventLoopGroup();ServerBootstrapb=newServerBootstrap();b.group(boss,worker).channel(NioServerSocketChannel.class).childHandler(newChannelInitializer<SocketChannel>(){protectedvoidinitChannel(SocketChannelch){ch.pipeline().addLast(sslCtx.newHandler(ch.alloc()));// HTTP/2帧编解码ch.pipeline().addLast(newHttp2FrameCodecBuilder(true).build());ch.pipeline().addLast(newHttp2ServerHandler());}});b.bind(8443).sync().channel().closeFuture().sync();}}

三、HTTP/2帧格式

HTTP/2 Frame: +------+------+------+------+------+------+------+------+ | 长度(3B) | 类型(1B) | 标志(1B) | 保留(1B) | StreamID(4B) | +------+------+------+------+------+------+------+------+ | 帧载荷(variable) | +------+------+------+------+------+------+------+------+

帧类型:DATA、HEADERS、PRIORITY、RST_STREAM、SETTINGS、PUSH_PROMISE、PING、GOAWAY、WINDOW_UPDATE


上一篇【第85篇】Netty异常处理机制——exceptionCaught的正确使用姿势
下一篇【第87篇】Netty Proxy Protocol支持——获取真实客户端IP