四、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即可使用。

猜你喜欢

转载自www.cnblogs.com/lay2017/p/12922436.html