zoukankan      html  css  js  c++  java
  • 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两种情况。
     
  • 相关阅读:
    【学习小记】一般图最大匹配——带花树算法
    如何检查oracle的归档空间是否满了
    Linux 的计划任务
    转 oracle的热备份和冷备份
    SQLException: Io 异常: Connection refused ERR=12514 ERR=1153异常处理过程
    查看oracle数据库版本
    ORACLE默认实例设置--linux
    oracle查看用户属于哪个表空间
    oracle默认数据库实例
    oracle 查看用户所在的表空间
  • 原文地址:https://www.cnblogs.com/aaronRhythm/p/11734158.html
Copyright © 2011-2022 走看看