之前总做互联网web开发,今天了解到前端也能写idl,因吹斯听。
IDL,PROTO,THRIFT三种 IDL 对比
┌─────────────────────────────────────────────────────────────────────────┐
│ 三种序列化协议对比 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ OMG IDL │ │ Thrift IDL │ │ .proto │ │
│ │ (.idl) │ │ (.thrift) │ │ (.proto) │ │
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
│ │ CDR │ │ Binary │ │ Protobuf │ │
│ │ 序列化 │ │ 协议 │ │ 序列化 │ │
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
│ │ Pub/Sub │ │ RPC │ │ RPC │ │
│ │ 模式 │ │ 模式 │ │ 模式 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘详细对比表
| 特性 | OMG IDL (DDS) | Thrift IDL | Protobuf (.proto) |
|---|---|---|---|
| 定义文件 | .idl | .thrift | .proto |
| 标准组织 | OMG | Apache | |
| 序列化 | CDR | Thrift 二进制协议 | Protocol Buffers |
| 通信模式 | 发布/订阅 (Pub/Sub) | 请求/响应 (RPC) | 请求/响应 + 流 (gRPC) |
| 默认传输 | UDP / TCP | TCP | HTTP/2 (gRPC) / TCP |
| 拓扑结构 | 多对多 (广播) | 一对一 (点对点) | 一对一 (点对点) |
| 服务发现 | 内置 (无需配置) | 需要注册中心 | 需要注册中心 |
| 适用场景 | 机器人、汽车总线 | 跨语言微服务 | 高性能微服务 |
Thrift IDL 示例
// 类似于 .proto 的 Thrift 版本
namespace cpp robot.example
struct FaultRaiseMsg {
1: required string fault_id, // 字段 ID + 类型 + 名称
2: required string device_pos,
3: required i64 occur_time
}
service FaultService {
void raise_fault(1: FaultRaiseMsg msg), // RPC 方法定义
void clear_fault(1: string fault_id)
}一句话总结
| IDL 定义 | 序列化 | 传输层 | 模式 | |
|---|---|---|---|---|
| DDS | .idl (OMG 标准) | CDR | UDP/TCP | Pub/Sub |
| Thrift | .thrift | Thrift 二进制 | TCP | RPC |
| Protobuf | .proto | Protobuf | HTTP/2 | RPC (gRPC) |
DDS 是"广播对讲机",Thrift/gRPC 是"电话通话"。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。