RPC(远程过程调用)和 HTTP(超文本传输协议)是两种不同的通信方式,它们各自有不同的定位和使用场景。下面用简单明了的方式说清楚它们的区别👇:
🧠 1. 定义不同
项目 | RPC(Remote Procedure Call) | HTTP(HyperText Transfer Protocol) |
---|---|---|
本质 | 一种通信方式/调用协议 | 一种应用层通信协议 |
作用 | 调用远程服务就像本地方法一样 | 浏览网页、传输数据等网络通信 |
🔍 2. 通信模型
-
RPC:调用远程函数 → 序列化参数 → 传给对方 → 执行函数 → 返回结果(像本地方法一样调用远程)
-
HTTP:基于客户端-服务器模型,请求/响应结构,主要传文本或 JSON 数据
🔧 3. 协议/底层传输
比较点 | RPC | HTTP |
---|---|---|
协议 | 可基于 HTTP、TCP、UDP、自定义协议 | 固定使用 HTTP 协议 |
传输 | 多数用 TCP,快,效率高 | 用 TCP,重头部,传输效率略低 |
格式 | 多用二进制(如 Protobuf) | 多用文本格式(JSON、XML) |
🧱 4. 数据格式
-
RPC:多采用高效的二进制序列化格式,如 Protobuf、Thrift(更快更省)
-
HTTP:多用 JSON、XML,通用但体积大、解析慢
⚙️ 5. 调用方式
-
RPC:面向方法,调用就像写 Java 函数一样
userService.getUserById(123); // 本质是远程调用
-
HTTP:面向资源,用 URL + 动词(GET/POST)访问
GET /user/123
⚖️ 6. 典型框架
类型 | 例子 |
---|---|
RPC | gRPC、Dubbo、Thrift、Motan |
HTTP | SpringMVC、Flask、Express |
📝 7. 总结一句话
RPC 更像调用函数,效率高,适合服务内部通信;HTTP 更像访问资源,通用性强,适合对外接口。