thrift 笔记

TThreadedSelectorServer

TThreadedSelectorServer 是一个比较常用的并且性能不错的 Thrift 服务。

TThreadedSelectorServer 可以说是一个半同步/半异步的 Thrift Server。

主要方法

  • startThreads () 开启 SelectorThread 线程和 AcceptThread 线程。
  protected boolean startThreads() {
    try {
      for (int i = 0; i < args.selectorThreads; ++i) {
        selectorThreads.add(new SelectorThread(args.acceptQueueSizePerThread));
      }
      acceptThread = new AcceptThread((TNonblockingServerTransport) serverTransport_,
        createSelectorThreadLoadBalancer(selectorThreads));
      for (SelectorThread thread : selectorThreads) {
        thread.start();
      }
      acceptThread.start();
      return true;
    } catch (IOException e) {
      LOGGER.error("Failed to start threads!", e);
      return false;
    }
  }
  • requestInvoke ( FrameBuffer frameBuffer ) 读取完请求信息之后,把 FrameBuffer 放到线程池处理业务逻辑。

线程模型

在 TThreadedSelectorServer 的 startThreads 里面会开启一个 接收线程和几个 Selector 线程。

AcceptThread 负责接收客户端连接,然后把连接路由到 SelectorThread 里面进行IO读写。

当 连接在 SelectorThread 里面读完了一个消息,则调用 processor 来处理业务逻辑。

处理完逻辑则回到 SelectorThread 把消息写会客户端。

TThreadedSelectorServer.png

内部类

TThreadedSelectorServer 中定义了上面提到过的 SelectorThread 线程和 AcceptThread 线程:

links