【转自】http://blog.youkuaiyun.com/poechant/article/details/6618284#
Thrift可以实现C++、Java、Python等多种语言的自动生成,此处以C++为例。
1. 编写[.thrift]文件
2. 自动生成服务器端程序
在Terminal中输入如下命令,可自动生成[.cpp]和[.h]文件。
thrift -r --gen cpp student.thrift
得到的文件如下:
- Serv.cpp
- Serv.h
- Serv_server.skeleton.cpp
- student_constants.cpp
- student_constants.h
- student_types.cpp
- student_types.h
其中Serv_server.skeleton.cpp中有服务器端运行的main函数。这些文件名的Serv和student与你最初创建的thrift文件有关。
3. 编写客户端程序
#include "Serv.h" // Your .h File
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using boost::shared_ptr;
int main(int argc, char **argv) {
boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
::SS::Student stu;
::SS::ServClient sn(protocol);
transport->open();
sn.put(stu);
transport->close();
return 0;
}
4. 编译/链接
g++ -g -I/usr/include/thrift -L/usr/lib/ -lthrift -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -o server g++ -g -I/usr/include/thrift -L/usrlib/ -lthrift -lm -pthread -lz -lrt -lssl -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H Serv.cpp student_types.cpp student_constants.cpp client.cpp -o client
5. 运行
./server
./client