Netty 框架 (一) channelDisconnected、channelClosed兩個事件區別


參考:

https://www.cnblogs.com/imstudy/p/9908791.html

https://blog.csdn.net/eric_sunah/article/details/80424344

https://blog.csdn.net/eric_sunah/article/details/80424381

 

NETTY 

//netty version: 3.1.5GA
//file: org.jboss.netty.channel.socket.nio.NioWorker.java
//method: static void close(NioSocketChannel channel, ChannelFuture future)
//line: 581

future.setSuccess();
if (connected) {
fireChannelDisconnected(channel);
}
if (bound) {
fireChannelUnbound(channel);
}
cleanUpWriteBuffer(channel);
fireChannelClosed(channel);

 

我們可以看到,在上述代碼中,在close channel的時候,會先判斷當前channel是否處於connected狀態,即是否已經成功地與遠程地址建立了連接,如果是的話,就觸發channelDisconnected事件;最后,再統一觸發channelClosed事件。
 
也就是說,任何對NioWorker.close(NioSocketChannel channel, ChannelFuture future)方法的調用都會觸發channelClosed事件,這些事件可能包括如下幾種:
  1. 已經與遠程主機建立的連接,遠程主機主動關閉連接,或者網絡異常連接被斷開的情況
  2. 已經與遠程主機建立的連接,本地客戶機主動關閉連接的情況
  3. 本地客戶機在試圖與遠程主機建立連接時,遇到類似與connection refused這樣的異常,未能連接成功時 
而只有當本地客戶機已經成功的與遠程主機建立連接(connected)時,連接斷開的時候才會觸發channelDisconnected事件,即對應上述的1和2兩種情況。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM