zoukankan      html  css  js  c++  java
  • Netty调用channel.close方法和 客户端所在Java进程正常/异常关闭的细节

    close方法中,客户端发出正常的挥手请求,在服务端的AbstractNioByteChannel的内部类NioByteUnsafe的read方法中,close = allocHandle.lastBytesRead() < 0这句为true,就不会进入channelRead而是进入if (close) {closeOnRead(pipeline);}----close(voidPromise())----doClose0 + fireChannelInactiveAndDeregister----执行pipeline里面的inactive和unregister方法。

    而客户端所在Java进程正常/异常关闭,客户端来不及发出挥手请求,发出的是RST复位请求,服务端在刚才说的unsafe.read方法中doReadBytes(byteBuf)这句直接抛出I/O异常,被捕捉后进入handleReadException方法,在方法中有fireExceptionCaught调用pipeline的exceptionCaught方法,而fireExceptionCaught下面还有之前说的closeOnRead,执行pipeline里面的inactive和unregister方法。

  • 相关阅读:
    第零次作业
    第一本书的学习笔记
    第一次作业
    第零次作业
    第一周作业
    第零次作业回复
    第零次作业
    第一周作业
    第0次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/chuliang/p/13534955.html
Copyright © 2011-2022 走看看