channelhandler中的channelInactive与close和disconnect事件有什么区别?
如果我手动关闭频道,将调用channelhandler中的所有三种方法吗?
如果通道因网络错误而关闭,那么将调用channelhandler中的所有三种方法?
我想知道我是否只是实施了channelInactive方法,是否也涵盖了所有关闭和断开事件?我的意思是channelInactive方法优于其他方法吗?
答案 0 :(得分:2)
不同之处在于disconnect
和close
是出站的,这也是ChannelOutboundHandler
中channelInactive
定义的原因,而ChannelInboundHandler
是入站的,因此在{{1}中定义}。
出站事件是通过Channel.*
,ChannelHandlerContext.*
方法显式触发的事件,例如:“我想要关闭频道”。然后,用户可以拦截这些并执行某些操作,例如延迟关闭等。
入站事件由传输本身(以及EventLoop
)触发,并且通常告诉您发生了某些事情(这可能是因为您请求它或远程对等体这样做了)。
disconnect
和close
之间的差异取决于传输本身,例如,当使用TCP
时,使用UDP
时没有差异,只有一个。