Netty源码剖析-关闭服务

摘要:
----主线:----源代码:在服务器上添加断点,修改如下代码:如图所示:然后启动服务器和客户端;然后跳过bossGroup到workerGroup;关闭workerGroup:在此之前,在NioEventLoop中的关闭点处创建一个断点:然后继续查看closeAll();这里选择Again();目的是删除取消的密钥。下一个密钥全部有效。

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

----主线:

 Netty源码剖析-关闭服务第1张

 ----源码:

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

Netty源码剖析-关闭服务第2张

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

Netty源码剖析-关闭服务第3张

然后跟进来看看closeAll();

Netty源码剖析-关闭服务第4张

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

Netty源码剖析-关闭服务第5张

 进入到confirmShutdown();

  Netty源码剖析-关闭服务第6张

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

Netty源码剖析-关闭服务第7张

----总结:

    ①关闭服务本质:

      关闭所有连接及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源码剖析-关闭服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTML中的表格标签微信小程序成长记录(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)使用SVN+CruiseControl+ANT实现持续集成之一

在前面的文章中, 介绍自己当时所在团队的处境(使用.NET开发),一个不到十个人的研发团队在保证正常开发进度同时需要并发支持四、五十个项目问题处理,经常为了程序版 本冲突、日常测试版本、发布版本提供等重复枯燥无味的手工劳动,导致团队成员身心俱疲。经历这样痛苦的一段时间,终于忍受不了,通过命令行实现了包括获 取、编译、发布过程的集成,大大减轻版本编译的时间,此...

源码分析:若依用户 user_id查询返回除了用户表,为何还带有部门dept和角色role表呢

 通过认真分析SysUser.java 部份源码如下, private SysDept dept; 以下是toString(){ .append("dept", getDept()) .append("roles", getRoles()) } package com.ruoyi.common.core.domain.entity; imp...

Node.js内置的工具和第三方模块来进行单步调试

1、命令行调试: Node.js调试命令: run 执行脚本,在第一行暂停 restart 重新执行脚本 cont,c 继续执行,知道遇到下一个断点 next,n 单步执行 step,s 单步执行,并进入函数 out,o 从函数中布出 setBreakpoint{},sb{} 在当前行设置断点 setBreakpoint{'f{}'},ab(...) 在...

深入理解读写锁—ReadWriteLock源码分析

转载:https://blog.csdn.net/qq_19431333/article/details/70568478 ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁。读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的。 所有读写锁的实现必须确保写操作对读操作的内存影响。换句话说,一个获得了读锁的线程必须能看到前一个释放的写锁所...

经典的CSS代码(转)

Web开发技术每年都在革新,浏览器已逐渐支持CSS3特性,并且网站设计师和前端开发者普遍采用这种新技术进行设计与开发。但仍然有一些开发者迷恋着一些CSS2代码。 分享20段非常专业的CSS2/CSS3代码供大家使用,你可以把它们保存在IDE里、或者存储在CSS文档里,这些代码片段绝对会给你带来意外的惊喜。 1. CSS Resets 网络上关于CSS重置的...

k8s apiserver 源码阅读笔记

更好的阅读体验建议点击下方原文链接。 原文: http://maoqide.live/post/cloud/apiserver-%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/ k8s apiserver 源码阅读笔记 代码结构 本部分用于记录 apiserver 代码整体结构及关键方法,便于到源码中查找,个人阅读记录,读者可跳过...