thrift小試--C++

【轉自】http://blog.csdn.net/poechant/article/details/6618284#html

Thrift能夠實現C++、JavaPython等多種語言的自動生成,此處以C++爲例。java

1. 編寫[.thrift]文件
python

將代碼保存爲student.thrift文件。apache

struct Student{  
 1: i32 sno,  
 2: string sname,  
 3: bool ssex,  
 4: i16 sage,  
}  

service Serv{  
 void put(1: Student s),  
} 

  

2. 自動生成服務器端程序bash

在Terminal中輸入以下命令,可自動生成[.cpp]和[.h]文件。服務器

 

thrift -r --gen cpp student.thrift  socket

 

獲得的文件以下:函數

 
  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文件有關。spa

 

3. 編寫客戶端程序.net

#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  

相關文章
相關標籤/搜索