前言:
今天同学们对“netty判断连接状态”可能比较着重,看官们都想要剖析一些“netty判断连接状态”的相关内容。那么小编在网摘上搜集了一些有关“netty判断连接状态””的相关内容,希望各位老铁们能喜欢,同学们一起来学习一下吧!在使用netty写Socket连接的时候参考的demo,在finally中总会提到优雅地关闭连接,那么问题来了,到底怎么算是优雅地关闭什么是不优雅呢?
首先我们来看看什么是不优雅?
比如我们的笔记本电脑死机了所有按键鼠标都不好使,关机键也不好使,长按关机也不好使,这个时候的暴力手段是什么:拔电池啊!对于电脑来说这种方式相当暴力,这等于是断电操作。
而在断电的过程中有可能机器正在把缓存中的数据持久化到磁盘中,也就是说你正在写的word文档还没存储到硬盘就关机了,再打开就找不到了。
那么何种方式是优雅地操作?
断电可以,让我先把没做完的任务做一下,之后我自己关机。
也就是说,当系统收到退出指令的时候,先记一下系统是要做退出操作,不再接受新的请求了,然后把积压的任务做完,然后把各种资源进行回收,最后系统关机退出。
Netty是如何优雅地退出呢?
类似上边的操作
1、netty退出连接的时候首先发信号设置NIO的连接状态为ST_SHUTTING_DOWN状态,不再处理新的消息;
2、把队列中尚未处理完的消息处理完,把马上到期的定时任务做完等;
3、把占用的资源释放掉,把建立的Channel通道释放、把定时任务队列清空、把多路复用器关闭
4、最后退出NIO连接。
Netty大致通过以上的流程优雅地关闭连接,而其实际实现则设计到复杂的线程组、线程、链路、多路复用器、定时任务等配合操作,这里不赘述了。