前言
程序开发的模式一般为前后端分离和微服务模式,前端(如nodejs)对数据处理后传递到后端,微服务模式下多个模块之间需要进行数据的交互。而数据交互有主要有两种方式,一种是通过 HTTP REST 的方式,还有一种就是 RPC 的方式,Thrift 就是属于 rpc 通信的一种方式。
- REST 是在 HTTP 基础上建立的数据交互,数据一般采用 JSON 格式
- Thrift 是在 Socket 基础上进行数据交互,数据传输方式灵活,可以通过二进制的方式传递,同时提供序列化和反序列化,也可以采用 JSON 格式
安装
本文环境为 Ubuntu20.04,其他操作系统可以查看官网:thrift.apache.org/
# 安装相关依赖 sudo apt-get install automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config # 本文服务端为cpp,客户端为python,故需安装相应包 sudo apt install g++ sudo apt install python3 sudo apt install python-all python-all-dev python-all-dbg # 下载thrift wget https://dlcdn.apache.org/thrift/0.16.0/thrift-0.16.0.tar.gz # 解压 tar -xf thrift-0.16.0.tar.gz # 进入该目录执行,等待 cd thrift-0.16.0/ ./configure sudo make sudo make install # 测试是否安装成功 thrift -version 复制代码
入门
- 编写测试接口,类似 cpp 的 struct,文件名为
test.thrift
,定义了 User 以及两个方法:
namespace cpp match_service struct User { 1: i32 id, 2: string name, 3: i32 score } service Match { i32 add_user(1: User user, 2: string info), i32 remove_user(1: User user, 2: string info), } 复制代码
- 然后通过接口生成 cpp 代码:
# cpp 可以改为其他编程语言 thrift -r --gen cpp test.thrift # 生成的代码都在 gen-cpp 目录下 复制代码
- 修改,启动服务端
cd gen-cpp # 修改文件名为main mv Match_server.skeleton.cpp main.cpp # 在main函数中添加一个输出用于测试 vim main.cpp # 编译,连接,运行 g++ -c *.cpp g++ *.o -o main -lthrift ./main 复制代码
- 明天基于此服务端更新一个匹配系统的实战😎
报错解决
cpp 找不到动态链接库:
sudo vim /etc/ld.so.conf # 在行末添加 /usr/local/lib # 使修改生效 sudo /sbin/ldconfig 复制代码
python 找不到 thrift 模块:
sudo apt install python3-pip sudo pip install thrift