目录
1、Thrift基础
1.1 数据类型
1.2 通讯支持
2、Linux环境安装Thrift
3、编写c++测试用例
3.1 编写thrift文件
3.2 生成cpp文件
3.3 编写客户端client.cpp
3.4 服务端代码
3.5 编译运行
基本类型:
结构体类型:
容器类型:
异常类型:
服务类型:
支持的数据传输协议(传输格式)
支持的数据传输方式
支持的服务模型
(1)安装依赖项:
sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev
(2)将thrift安装包下载下来,并解压安装
tar -zxvf thrift-0.13.0.tar.gz
cd thrift-0.13.0/
./configure
sudo make
sudo make install
(3)测试安装是否成功
thrift -version
例子描述:我们将学生信息(学号,姓名,性别,年龄)由客户端发送到服务端。
学生信息使用thrift的struct即可,为了达到通信目的,我们需要写一个service。注意改出service的名字为Serv,方法名字为put。
student.thrift文件内容如下:
struct Student{
1: i32 sno,
2: string sname,
3: bool ssex,
4: i16 sage,
}
service Serv{
void put(1: Student s),
}
thrift可以简易生成不同语言的代码,c++ python java等,此处我们只用--gen cpp第一个命令即可
thrift -r --gen cpp student.thrift
#thrift -r --gen java student.thrift //生成java代码
#thrift -r --gen py student.thrift //生成python代码
如下生成7个文件:Serv开头的文件是由service的名字生成的,查看Serv_server.skeleton.cpp可以看到put方法。这些文件可以编译,生成最初的客户端,编译命令如下:
cd到gen-cpp所在的文件夹,执行如下编译命令,注意生成的server可执行文件是在gen-cpp文件夹中的。
Serv.cpp
Serv.h
Serv_server.skeleton.cpp #简单的server端代码,可以修改,一般都参照它来写serve程序
student_constants.cpp
student_constants.h
student_types.cpp
student_types.h
#include "./gen-cpp/Serv.h"
#include
#include
#include
#include
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
//using boost::shared_ptr;
int main(int argc, char **argv) {
std::shared_ptr socket(new TSocket("127.0.0.1", 9090));
std::shared_ptr transport(new TBufferedTransport(socket));
std::shared_ptr protocol(new TBinaryProtocol(transport));
transport->open();
//*****************添加部分******************
Student s;
s.sno = 123;
s.sname = "xiaoshe";
s.ssex = 1;
s.sage = 30;
ServClient client(protocol);
std::cout<<"client send a data"<close();
return 0;
}
编译:g++ -g -o client -Ithrift client.cpp gen-cpp/Serv.cpp gen-cpp/student_types.cpp gen-cpp/student_constants.cpp -lthrift
在Serv_server.skeleton.cpp中添加打印信息如下:
void put(const Student& s) {
// Your implementation goes here
printf("put\n");
printf("sno=%d sname=%s ssex=%d sage=%d/n", s.sno, s.sname.c_str(), s.ssex, s.sage); //********次行为添加代码********
}
编译:g++ -g -o server -Ithrift Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -lthrift
(1)启动服务端:./server
(2)启动客户端:./client
客户端结果:
服务端结果:
注:更多测试用例可参照 thrift-0.13.0/test/ 目录下的demo。
参考:
1、Thrift框架使用C++的一个demo