四、netty channel pipeline
所有文章
https://www.cnblogs.com/lay2017/p/12922074.html
正文
ChannelPipeline是netty中非常核心的概念之一。每个SocketChannel都会包含ChannelPipeline,ChannelPipeline包含一系列ChannelHandler。ChannelHandler将在数据读取或者写入SocketChannel的时候调用。
ChannelHandler有两个子接口
1.ChannelInboundHandler
2.ChannelOutboundHandler
你可以同时添加这两个,如图
如图所示,当从SocketChannel读取数据以后,会按照ChannelInboundHandler顺序调用处理数据,前一个ChannelInboundHandler处理改变数据结构,比如把字节数据转换成Http的请求。而如果要写入数据到SocketChannel,按照ChannelOutboundHandler的顺序执行。
注意,上图把Inbound和Outbound分离展示,事实上它们在Pipeline中是以同一个集合列表存在的。也有可能第二个ChannelInboundHandler想要处理数据输出,如图
编解码
netty有编解码的概念,编解码器把byte转Java对象,或者把Java对象转byte。编解码器事实上也就是一个ChannelHandler,也可能是两个ChannelHandler。不管怎么说,编解码器需要实现ChannelInboundHandler将byte转Java对象,以及ChannelOutboundHandler把Java对象转byte。
netty内置的编解码器有http、websocket、ssl、tlv等,你只需要添加到pipeline即可使用。