常见 RPC 协议类别对比

常见 RPC 协议类别对比

RPC(Remote Procedure Call,远程过程调用)协议是分布式系统中实现跨进程通信的核心机制之一。它允许客户端像调用本地函数一样调用远端服务器上的函数。

根据通信方式、数据编码方式和平台兼容性不同,常见的 RPC 协议分为以下几类,每类都有各自的优缺点和适用场景:

✅ 一、常见 RPC 协议类别对比

类别

代表协议

编码格式

传输协议

优点

缺点

典型应用场景

基于 HTTP/JSON

RESTful API、JSON-RPC

JSON

HTTP/HTTPS

易用、调试方便、语言无关

性能较低、无严格接口约束

Web 服务、跨语言微服务通信

基于 HTTP/Protobuf

gRPC

Protobuf(二进制)

HTTP/2

高性能、强类型、支持流、IDL 生成代码

学习曲线略高、调试困难

微服务通信、移动端、边缘计算

基于 TCP/自定义协议

Thrift、Dubbo、Hessian

自定义或 Protobuf

TCP

高性能、灵活、支持多语言

上手复杂、配置多

大规模分布式系统、企业后端

基于消息队列

RabbitMQ RPC、Kafka RPC

JSON/Protobuf

AMQP、Kafka

解耦强、支持异步

实时性略低、依赖 MQ 系统

解耦服务、任务分发、微服务架构

基于 Socket

自定义 RPC

任意

TCP/UDP

灵活、无依赖

开发难度大、易出错

游戏服务器、实时通讯、嵌入式系统

WebSocket RPC

JSON-RPC over WebSocket

JSON

WebSocket

全双工通信、低延迟

复杂性略高、浏览器兼容问题

浏览器与服务器实时通信

GraphQL over HTTP

Apollo GraphQL

JSON

HTTP

灵活查询、多字段聚合

缺乏标准的错误处理机制

前后端分离接口、聚合微服务数据

🧩 二、各类代表协议简介与特点

1️⃣ gRPC(Google RPC)

编码方式:Protobuf

传输协议:HTTP/2

特点:

自动生成代码(强接口约束)

支持双向流通信、拦截器

高性能(压缩+二进制)

✅ 适用场景:微服务、高性能内网通信、移动/边缘服务

2️⃣ JSON-RPC / RESTful API

编码方式:JSON

传输协议:HTTP/HTTPS

特点:

人类可读,调试方便

与浏览器、前端框架天然兼容

语言无关、易跨平台

✅ 适用场景:开放 API、跨语言服务、前后端接口通信

3️⃣ Apache Thrift

支持多种语言(Java、C++、Python...)

可选传输协议和数据编码方式

特点:

高度可配置(协议+传输分离)

性能好、支持异步

✅ 适用场景:大型分布式系统、跨语言后端通信

4️⃣ Dubbo(阿里)

支持多种协议(Dubbo、REST、gRPC)

特点:

支持服务治理、动态路由

Java 生态深度整合(Spring)

✅ 适用场景:企业 Java 微服务系统,阿里系架构

5️⃣ 基于消息队列的 RPC(如 RabbitMQ)

模式:RPC 请求通过 MQ 发到远端,响应回调再写回

特点:

解耦通信,支持异步处理

消息可靠性高

✅ 适用场景:任务队列、低频调用、系统解耦

📌 三、总结表格

维度

gRPC

JSON-RPC/REST

Thrift

Dubbo

MQ RPC

自定义 Socket

性能

⭐⭐⭐⭐

⭐⭐

⭐⭐⭐

⭐⭐⭐⭐

⭐⭐

⭐⭐⭐⭐

易用性

⭐⭐

⭐⭐⭐⭐

⭐⭐

⭐⭐

⭐⭐

可读性

⭐⭐⭐⭐

⭐⭐

⭐⭐

⭐⭐

跨语言支持

⭐⭐⭐

⭐⭐⭐⭐

⭐⭐⭐⭐

⭐⭐

⭐⭐⭐

推荐用途

微服务、移动端

开放 API、前端

分布式后端

Java 后端

解耦异步

游戏、物联网

相关推荐

如何彻底关闭Windows 10中的Xbox游戏栏
det365APP

如何彻底关闭Windows 10中的Xbox游戏栏

📅 09-17 👁️ 1955
如何给string数组赋值Java
36365快速检测中心

如何给string数组赋值Java

📅 07-14 👁️ 2533
【古诗词鉴赏】唐代诗人王绩《野望》诗赏析
“李拐子”传人告四子女不赡养
365bet足球比

“李拐子”传人告四子女不赡养

📅 08-07 👁️ 5377
2024渠道服折扣充值平台排名,一探vivo、小米哪个优惠力度大
基层党组织选举时,如何填写选票? - 其他党务问题
36365快速检测中心

基层党组织选举时,如何填写选票? - 其他党务问题

📅 11-04 👁️ 959