thrift小试--C++

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

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

1. 编写[.thrift]文件

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

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

  

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

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

 

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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. 编译/链接

1
2
3
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  

posted @   dorothychai  阅读(476)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2015-04-28 linux安装SVN
2015-04-28 Java web项目在linux环境下自动编译和部署脚本
2012-04-28 socket[转]--有时间再研究吧
点击右上角即可分享
微信分享提示