代码详情:
https://github.com/wangmingyangid/netty01
通过定义如下几个Handler实现该功能:
1. HttpServerCodec
将字节解码为 HttpRequest、HttpContent 和 LastHttpContent。并将 HttpRequest、HttpContent 和 LastHttpContent 编码为字节。
2. ChunkedWriteHandler
写入一个文件的内容(在文件需要进行加解密和压缩时使用)
3 . HttpObjectAggregator
将一个 HttpMessage 和跟随它的多个 HttpContent 聚合 为单个 FullHttpRequest 或者 FullHttpResponse(取 决于它是被用来处理请求还是响应)。
安装了这个之后, ChannelPipeline 中的下一个 ChannelHandler 将只会 收到完整的 HTTP 请求或响应
4. HttpRequestHandler
处理 FullHttpRequest(那些不发送到/ws URI 的请求)
5. WebSocketServerProtocolHandler
按照 WebSocket 规范的要求,处理 WebSocket 升级握手、 PingWebSocketFrame 、 PongWebSocketFrame 和 CloseWebSocketFrame
6. TextWebSocketFrameHandler
处理 TextWebSocketFrame 和握手完成事件
WebSocket 协议升级之前的 ChannelPipeline 的状态如图
当 WebSocket 协议升级完成之后,WebSocketServerProtocolHandler 将会把 HttpRequestDecoder替换 为 WebSocketFrameDecoder,
把 HttpResponseEncoder 替换为 WebSocketFrameEncoder。为了性能最大化,它将移除任何不再被 WebSocket 连接所需要的 ChannelHandler。
这也包括了图 12-3 所示的 HttpObjectAggregator 和 HttpRequestHandler。
图12-4 展示了这些操作完成之后的ChannelPipeline