Thrift 简单介绍

从客户端视角看,Thrift 建立连接一共需要五个元素

① 服务器 IP
② 服务器 端口 Port
③ 传输方式 Transport
④ 编码协议 Protocol
⑤ 服务 Stub(接口类)

1、传输方式 Transport 常见类型及区别

传输类 底层依赖 是否带消息边界 是否适合非阻塞 是否推荐 构造方式
TSocket TCP 无 否 只作基础 方式2
TBufferedTransport TCP 无 否 旧项目 方式2
TBufferedTransport TCP 有 是 强烈推荐 方式2
TZlibTransport TCP 无 否 用于压缩 方式2
THttpClient HTTP 有 是 Web 场景 方式1

方式1:

cpp 复制代码
// ✅ 只有 HTTP 客户端是这样构造的
std::make_shared<THttpClient>(host, port);

方式2:

cpp 复制代码
// ✅ 其他所有 Transport 都必须这样构造
auto sock = std::make_shared<TSocket>(host, port);
auto trans = std::make_shared<XXXTransport>(sock);

2、编码协议 Protocol常见类型及区别

Protocol 决定数据变成网络字节时是:

  • 文本
  • 二进制
  • 压缩
  • 精简字段编号
Protocol 编码方式 是否二进制 速度 可读性 是否推荐
TBinaryProtocol 标准二进制 ✅ 快 ❌ ✅
TCompactProtocol 压缩二进制 ✅ 更快 ❌ ✅✅✅
TJSONProtocol JSON 文本 ❌ 慢 ✅ 只适合调试
TSimpleJSONProtocol 简化 JSON ❌ ❌ ✅ 已很少用
TDebugProtocol 调试输出 ❌ ❌ ✅ 只用于日志

构造方式:

cpp 复制代码
proto_ = std::make_shared<具体Protocol类型>(trans_);

3、连接

此时已经配置好了传输方式 Transport 和编码协议 Protocol,那么就可以连接服务端了。

cpp 复制代码
auto sock  = std::make_shared<TSocket>(ip, port);        // ① 创建 TCP socket
auto trans = std::make_shared<TFramedTransport>(sock);   // ② 绑定传输层
auto proto = std::make_shared<TCompactProtocol>(trans); // ③ 绑定协议层

trans->open();                                          // ✅ ④ 真正建立 TCP 连接
client = std::make_shared<SampleRegLCClient>(proto);   // ⑤ 创建客户端桩
相关推荐
aqiu1111113 小时前
【C++算法打怪专栏】C++ `unordered_set` 常用初始化与插入方法总结
开发语言·c++·算法
Terra.K4 小时前
高精度阶乘求和模板深度解析
开发语言·c++·算法
Peregrine94 小时前
C++ - > 类和对象
java·c++·算法
Gigavision5 小时前
DEAP数据集 2026最新Transformer算法 DEAP 数据集 下载
深度学习·算法·transformer
夜之眷属6 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
地平线开发者6 小时前
不是线程越多越快:用 hrt_model_exec 在 征程6M 上给 YOLOv5x 建立性能基线
算法
姜鱼问生7 小时前
fail2ban 实战:从默认配置到生产可用
后端·算法·架构
垆边人似月.7 小时前
华为题:全排列
算法·深度优先·图论
杜 硕7 小时前
快速排序详解01
数据结构·算法·排序算法
Matlab程序猿7 小时前
【MATLAB源码-第459期】基于matlab的D-H模型与阻尼最小二乘逆运动学的六自由度机械臂五次轨迹规划及动力学前馈PD控制仿真。
人工智能·算法·matlab·d-h建模·六自由度串联机械臂