运维开发网

The Life CyCle of ChannelHandler

运维开发网 https://www.qedev.com 2021-01-14 11:51 出处:51CTO 作者:mb5ff40abe496e6
2016年拍摄于台湾省垦丁鹅銮鼻灯塔。        王皓的GitHub:https://github.com/TenaciousDWang          今天我们来看一下关于ChannelHandler的生命周期。其实就是ChannelHandler中定义的方法,也就是通常我们继承ChannelHandler类及子类或接口时,覆写的方法。                我们将这个Handle

The Life CyCle of ChannelHandler

2016年拍摄于台湾省垦丁鹅銮鼻灯塔。

The Life CyCle of ChannelHandler

        

The Life CyCle of ChannelHandler

王皓的GitHub:https://github.com/TenaciousDWang  

        今天我们来看一下关于ChannelHandler的生命周期。其实就是ChannelHandler中定义的方法,也就是通常我们继承ChannelHandler类及子类或接口时,覆写的方法。

The Life CyCle of ChannelHandler

The Life CyCle of ChannelHandler

        

        我们将这个Handler放在服务端首位,然后看一下控制台打印顺序。

The Life CyCle of ChannelHandler

        首先启动服务端,控制台打印服务端启动中。端口[8000]绑定成功,接着我们启动客户端,现在我们客户端启动时会自动发送登陆请求数据,我们可以看到控制台打印顺序。

  1. handlerAdded()方法是指逻辑处理链在添加Handler时成功后回调的方法,表示当前处理链中添加了一个Handler。

  2. channelRegistered()方法指当一个连接建立一个连接后NIO会分配一个线程来管理这个连接,Hanlder已经绑定到该线程上。

  3. channelActive()方法表示所有Handler已经全部绑定到线程上,已经是一个完整的逻辑处理链时,会回调此方法。

  4. channelRead()方法表示当有数据可读时,也就是在我们客户端发来登陆请求数据时回调。

  5. channelReadComplete()方法表示一个完整的数据包读取完毕。

        接下来我们强制关停客户端,然后看一下服务端Handler剩余方法的调用顺序。

The Life CyCle of ChannelHandler

         6. channelInactive(): 表面这条连接已经被关闭了。

        7. channelUnregistered():连接关闭后,NIO也会收回线程对该连接的管理,那么这个Handler也就与该线程解除绑定。

        8. handlerRemoved():最后将所有逻辑处理器都移除完毕后回调该方法。

        从handlerAdded()方法回调,到handlerRemoved()方法回调,就是一个完整的ChannelHandler的生命周期。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号