RPC服务框架Apache Thrift学习笔记--简单示例

前置声明:
如果读者还没安上一篇文章的流程安装好Thrift,那建议您先看上一篇文章

开始示例:
第一步:首选创建一个后缀为.thrift文件,取名为tutorial.thrift
文件内容如下图1,大致功能是有个叫Tutorial的服务,它有一个ping的接口,返回一个32为的有符号整数:



图1
第二步:用Thrift自动生成相应语言的代码,比如C++, Python, PHP等对应的server端以及client端代码,而且能在它们之间无缝的结合

C++

thrift --gen cpp tutorial.thrift

这个命令之后就会在当前目录下多出 gen-cpp目录

Python

thrift --gen py tutorial.thrift

这个命令之后就会在当前目录下多出 gen-py目录
PHP

thrift --gen php tutorial.thrift

这个命令之后就会在当前目录下多出 gen-php目录
第三步:运行相应的server服务以及和client端进行通信(server和client是可以混搭的,下面会介绍用python的client和C++的server进行通信)

C++ Server
改下红框里的代码


g++ -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -Wall -I/usr/local/include/thrift *.cpp -L/usr/local/lib -lthrift -o simple_server

然后运行可执行文件就能起服务了

./simple_server

C++ Client
Thrift不会像Server那样自动生成Client的文件,需要自己改


g++ -Wall -I/usr/local/include/thrift -c client.cpp -o client.o
g++ -Wall -I/usr/local/include/thrift -c Tutorial.cpp -o Tutorial.o
g++ -Wall -I/usr/local/include/thrift -c tutorial_constants.cpp -o tutorial_constants.o
g++ -Wall -I/usr/local/include/thrift -c tutorial_types.cpp -o tutorial_types.o
g++ -L/usr/local/lib client.o Tutorial.o tutorial_constants.o tutorial_types.o -o client -lthrift

然后运行可执行文件就能调用服务器接口了

./client

会返回Hello World
Python Server



执行运行:

python server.py

Python Client



用python的client和C++的server进行通信:



其他:

运行C++的时候可能会报、error:./CppServer: error while loading shared libraries: libthrift-1.0.0-dev.so: cannot open shared object file: No such file or directory
解决方法:
1、使用find命令查找缺失的libthrift-1.0.0-dev.so共享库文件所在位置:find /usr/local/ -name "libthrift-1.0.0*”
2、将找到的目录位置写入 /etc/ld.so.conf 配置文件,这个文件记录了编译时使用的动态链接库的路径,使用命令:sudo vim /etc/ld.so.conf ,在末尾增加报错文件的路径
3、然后使用ldconfig命令,使配置生效
4.再运行测试程序正常
参考文章:
http://thrift.apache.org/tutorial/
http://blog.csdn.net/ceasadan/article/details/52277136

推荐阅读更多精彩内容