Netty源码剖析-关闭服务

参考文献:极客时间傅健老师的《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%保证)

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

猜你喜欢

转载自www.cnblogs.com/-qilin/p/11821896.html