Thrift2

来源:互联网 发布:帝国cms根目录 编辑:程序博客网 时间:2024/06/08 16:12

Thrift可以实现C++、Java、Python等多种语言的自动生成,此处以C++为例。


本文共5部分,其中1,2和3部分为重点。


1. 编写[.thrift]文件

你可以google到官方的实例如下:

  1. struct Student{  
  2.  1: i32 sno,  
  3.  2: string sname,  
  4.  3: bool ssex,  
  5.  4: i16 sage,  
  6. }  
  7. service Serv{  
  8.  void put(1: Student s),  
  9. }  

将上述代码保存为student.thrift文件。


2. 自动生成服务器端程序

在Terminal中输入如下命令,可自动生成[.cpp]和[.h]文件。

  1. thrift -r --gen cpp student.thrift  

得到的文件如下:

  1. Serv.cpp  
  2. Serv.h  
  3. Serv_server.skeleton.cpp  
  4. student_constants.cpp  
  5. student_constants.h  
  6. student_types.cpp  
  7. student_types.h  

其中Serv_server.skeleton.cpp中有服务器端运行的main函数。这些文件名的Serv和student与你最初创建的thrift文件有关。


3. 编写客户端程序

  1. #include "Serv.h"  // Your .h File  
  2. #include <transport/TSocket.h>  
  3. #include <transport/TBufferTransports.h>  
  4. #include <protocol/TBinaryProtocol.h>  
  5.   
  6. using namespace apache::thrift;  
  7. using namespace apache::thrift::protocol;  
  8. using namespace apache::thrift::transport;  
  9.   
  10. using boost::shared_ptr;  
  11.   
  12. int main(int argc, char **argv) {  
  13.     boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));  
  14.     boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));  
  15.     boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));  
  16.   
  17.     transport->open();  
  18.   
  19.     // Your Codes  
  20.   
  21.     transport->close();  
  22.   
  23.     return 0;  
  24. }  

4. 编译/链接

  1. g++ -g -I/home/michael/opt/include/thrift -L/home/michael/opt/lib/ -lthrift Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -o server  
  2.   
  3. g++ -g -I/home/michael/opt/include/thrift -L/home/michael/opt/lib/ -lthrift -lm -pthread -lz -lrt -lssl Serv.cpp student_types.cpp student_constants.cpp client.cpp -o client  

5. 运行

  1. ./server  
  2.   
  3. ./client  
0 0
原创粉丝点击