thrift 笔记

AbstractNonblockingServer

AbstractNonblockingServer 是所有 NonblockingServer(非阻塞服务)的父类。

该类是一个抽象类,同时继承了 TServer。

下面是截取了 AbstractNonblockingServer 中 server () 方法的部分代码:

public abstract class AbstractNonblockingServer extends TServer {
  ...
  
  /**
   * Begin accepting connections and processing invocations.
   */
  public void serve() {
    // start any IO threads
    if (!startThreads()) {
      return;
    }

    // start listening, or exit
    if (!startListening()) {
      return;
    }

    setServing(true);

    // this will block while we serve
    waitForShutdown();

    setServing(false);

    // do a little cleanup
    stopListening();
  }
  
  protected void handleRead(SelectionKey key) {
     ...
  }
  
  protected void handleWrite(SelectionKey key) {
     ...
  }

  ...
}

主要方法:

  • serve () 方法定义了 NonblockingServer(非阻塞服务)启动的流程。

  • handleRead ( SelectionKey key ) 处理读逻辑,先read,然后判断是否读完,读完的话调用process执行业务,处理完业务,更改状态为写

  • handleWrite ( SelectionKey key ) 处理写

同时,AbstractNonblockingServer 以内部类的形式还定义了几个NonblockingServer 里面比较关键类:

  • FrameBuffer 代表了一个客户端连接,封装了一些读写方法。
  • AsyncFrameBuffer 异步的 FrameBuffer
  • AbstractSelectThread 一个抽象的 SelectThread

links