Netty (5)-ChannelPipeline

每个连接channel都会创建一个ChannelPipeline,它将多个ChannelHandler组装起来,当收发消息时,按一定顺序和规则将消息传播给各个ChannelHandler进行处理。

入站处理和出站处理

ChannelHandler分入站(ChannelInboundHandler)和出站(ChannelOutboundHandler),收到消息做入站处理,发出消息做出站处理。假如在ChannelPipeline中按顺序放入5个ChannelHandler,第1、3、5是入站,收到消息时按顺序触发。第2、4是出站。发出消息时会按逆向顺序触发。

出站是按逆向顺序,假如在入站3的时候就结束入站处理,并且发出消息触发出站,按逆向出站只能触发出站2,而不会触发4和5。只有在入站5发出消息触发出站,才会先后触发出站4和2。

ChannelPipeline操作

ChannelPipeline内的ChannelHandler数量或顺序都可以动态进行调整修改

			ServerBootstrap b = new ServerBootstrap(); 
			b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) 
					.childHandler(new ChannelInitializer<SocketChannel>() {
						@Override
						public void initChannel(SocketChannel ch) throws Exception {
							ch.pipeline().addLast("handler1",new Handler1());//1添加到结尾
							ch.pipeline().addLast("handler2",new Handler2());//2添加到结尾
							ch.pipeline().addfirst("handler3",new Handler3());//3添加到开头
							ch.pipeline().remove("handler1");//移除1
							ch.pipeline().replace("handler2","handler4",new Handler4());//4替代2
							ch.pipeline().addBefore("handler3","handler5",new Handler5());//在3前面添加5
							ch.pipeline().addAfter("handler3","handler6",new Handler6());//在3后面添加6
							

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值