文章简介

运用Thrift的TNonblockingServer编写C++实践案例。

Thrift服务端编程

从Thrift-0.12.0版本的C++源代码来看服务端编程主要有:多线程模型,一个新的客户端连接创建一个线程处理;多线程线程池模型,将新的客户端连接放入任务队列中由线程池读取处理;事件驱动异步模型,注册监听事件和可读事件,将客户端的数据放入任务队列中由线程池进行处理。事件驱动异步模型更适合运用在互联网大量用户的场景中,也就是TNonblockingServer。

Thrift中TNonblockingServer的设计和实现

Thrift实践(C++)-LMLPHP

图1-1 TNonblockingServer的实现

如图1-1所示,当一个新的客户端连接accept时,会new一个TConnection对象,通过轮询选择算法发送给IOThread线程池,IOThread接收到客户端发来的请求数据时,将它打包成Task放入任务队列中,再由任务处理线程池Thread从任务队列pop出来调用服务端实现的业务逻辑函数处理。下面以用户注册的业务场景为例,实现一个具体的TNonblockingServer案例。

Thrift接口文件编写

运行thrift -r --gen cpp user.thrift,生成服务端和客户端RPC接口文件。其中required是必传字段,optional是可选字段。

服务端代码实现

客户端代码实现

编译和运行

参考文献

[1] Mark Slee, Aditya Agarwal and Marc Kwiatkowski. Thrift: Scalable Cross-Language Services Implementation. 2007

[2] Apache Thrift官方网站, http://thrift.apache.org

[3] Apache Thrift源代码, https://github.com/apache/thrift

[4] Lex & Yacc 官方网站, http://dinosaur.compilertools.net

Thrift实践(C++)-LMLPHP

01-28 05:43