整理下thrift TNonblockingServer的工作流程,简单记录下, 因为处理过程比较复杂不具体分析了,
TNonblockingServer的工作流程如下:
1. server 创建 多个 iothread 和 工作线程池 workpool thread (给iothread发消息的方式主要通过管道的方式进行 )
2. 传递listenfd 给 iothread 的 number 为0的线程,该线程监听listen socket的accept事件
3. 当0号iothread 监听到accept事件时, 创建connection 并交给相应的iothread处理数据收发(通过管道方式通知相应的iothread)
4. iothread收到新的connection 根据 connection的状态 进行数据收发等处理 ,该逻辑由conection的
transition()函数完成, 第一部肯定是请求报文的read操作
5. 当connection的一个请求数据read完成时, 封装成任务task交由workpool thread 的线程池处理
6. workpool thread 任务线程处理完成后会调用notifyIOThread通知connection对应的iothead来发送结果给客户端
7. iothread将处理完成结果发送给客户端, 一个请求处理完成.
~~TNonblockingServer.py的设计思路跟CPP基本是一样的,可以参考着看看~~