前言
上篇讲解ChannelHandler的使用以及相关子类的使用,这一篇继续来讲讲ChannelPipeline与ChannelHandlerContext,它们三者的有效组合让Netty在处理业务逻辑上得心应手。在讲ChannelHandlerContext之前先来讲讲ChannelPipeline。
ChannalPipeline
Pipeline 可以翻译成管道,在Netty中ChannelPipeline的作用也如同一条管道,通过这条管道处理入站与出站的数据、事件;通过ChannelPipeline对ChannelHandler的有效编排和交互组成一个应用程序数据和事件处理逻辑的核心。
Netty会对每一个新创建的Channel分配一个与之关联的新的ChannelPipeline实例,这个关联是永久的并且是一一对应的,一个Channel不能附加另外一个ChannelPipeline实例也不能分离当前关联的ChannelPipeline实例。下面通过一个示例来看看:
bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
//添加MessageChannel至pipeline中
ch.pipeline().addLast