Netty的一些小笔记

1、ctx.write()与ctx.channel().write()的区别

ctx.write()方法在调用的时候,根据ChannelPipeline的放置顺序,写出去数据只经过在它之前的ChannelPipeline,而ctx.channel().write()方法则会通过完整的ChannelPipeline。

以通过IdleState发送心跳包为例子,当触发IdleState事件的时候,事件往后传递,到userEventTriggered()处进行事件处理,并以此为起点,反序向前运行。


ctx.write()方法在 IdleStateHandler()方法里调用,消息没有经过Encoder就直接发送出去,很可能造成消息接收失败,或者是无法解析等问题。

ctx.channel().write()方法则会按顺序经过每一个ChannelOutboundHandler



2、关于 IdleStateHandler()方法的使用
 IdleStateHandler()的状态会触发userEventTriggered()方法,但前提是userEventTriggered()方法必须 IdleStateHandler()的后面,这关系到channelpipeline的顺序,当 IdleStateHandler()事件触发了以后,消息会一直往后走,如图所示:
图中IdleStateHandler()位于pipeline的最后一位,触发事件以后消息一直往后传递,却没有userEventTriggered()方 法对消息进行处理, IdleStateHandler()事件就不能生效了。

正常的使用方式是这样的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值