首页 > Web开发 > 详细

Netty源码剖析-关闭服务

时间:2019-11-08 19:17:43      阅读:100      评论:0      收藏:0      [点我收藏+]

参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!

----主线:

 技术分享图片

 

 

 

 ----源码:

  先在服务端加个断点和修改下代码:如图:

技术分享图片

 

 

 然后启动server和client;然后跳过bossGroup到workerGroup;进入workerGroup的关闭:在此之前呢,先在NioEventLoop里面的关闭处打个断点:

技术分享图片

然后跟进来看看closeAll();

技术分享图片

 

 

 这里selectAgain();目的是为了去除canceled的key,接下来的key都是有效的key了。完成之后接着回去

技术分享图片

 

 

 进入到confirmShutdown();

  技术分享图片

 

 

 这里会run Task和hook;挨个执行则返回:

技术分享图片

 

 

 

----总结:

    ①关闭服务本质:

      关闭所有连接及Selector:

    java.nio.channels.Selector#keys

      java.nio.channels.spi.AbstractInterruptibleChannel#close

      java.nio.channels.SelectionKey#cancel

    selector.close();

    关闭所有线程:退出循环体for(;;).

    ②关闭服务要点:

      优雅(DEFAULT_ SHUTDOWN_ _QUIET_ PERIOD )

      可控(DEFAULT_ SHUTDOWN_ _TIMEOUT)

      先不接活,后尽量干完手头的活(先关boss后关worker: 不是100%保证)

 

我只想做的更好,仅此而已。

 

Netty源码剖析-关闭服务

原文:https://www.cnblogs.com/-qilin/p/11821896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!