RPC、HTTP、WebSocket的区别
2026/4/27 22:45:02 网站建设 项目流程

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​https://www.captainai.net/troubleshooter

这三者都是常用的通信协议,但设计目标和应用场景有本质区别。简单来说:

  • RPC(远程过程调用):让你像调用本地函数一样调用远程服务。

  • HTTP(超文本传输协议):一种通用的、无状态的请求-响应协议。

  • WebSocket:一种在单个TCP连接上建立的全双工、持久化的通信协议。

下面是它们的核心区别,从抽象到具体:

1. 通信模型与方向

  • RPC请求-响应。客户端发起调用,等待服务端返回结果。通常是同步的,但也可以实现异步。

  • HTTP/1.1请求-响应。经典的一问一答,客户端不请求,服务端就不能主动发消息。

  • WebSocket全双工、双向、持久化。连接建立后,客户端和服务端可以在任何时间主动向对方发送消息,没有“谁请求谁响应”的限制。

2. 协议与消息格式

  • RPC

    • 传输层:通常运行在TCP协议上,也可以运行在HTTP/2之上(如gRPC)。

    • 数据格式:高效、紧凑的二进制格式(如Protobuf、Thrift、MessagePack)或JSON。二进制是RPC高性能的关键

    • 自定义:RPC框架(如gRPC、Dubbo)会定义自己的应用层协议规则,比纯文本的HTTP更紧凑。

  • HTTP

    • 传输层:基于TCP。

    • 数据格式文本化的请求行、头部和可选的消息体(常用JSON、XML、HTML等)。HTTP头部包含大量元数据,体积较大,传输效率相对较低。

  • WebSocket

    • 传输层:基于TCP。

    • 协议:它需要通过一次HTTP升级请求来建立连接(这就是常说的“握手”)。连接建立后,就切换为WebSocket自己的轻量级二进制帧协议,头部开销非常小(约2-10字节)。

3. 连接管理

  • RPC:可以复用长连接(如gRPC基于HTTP/2的单一连接),减少握手开销。但连接不是必须持久的,也可以短连接。

  • HTTP/1.1:可以复用TCP连接(Keep-Alive),但本质上还是多个“请求-响应”串在一条连接上。队头阻塞问题(一个慢请求堵住后面的请求)依然存在。

  • WebSocket持久的长连接。一旦建立,理论上会一直保持,直到一方主动关闭。连接状态是持续维护的。

4. 状态管理

  • RPC:通常是有状态的。连接本身可以维持会话上下文,一个连接上的多个请求天然关联。

  • HTTP无状态。每个请求都是独立的,服务器默认不记住客户端。需要通过Cookies、Session、Token等机制来模拟状态。

  • WebSocket有状态。连接本身就代表了会话,双方可以清晰地知道对方是否在线。

5. 性能与适用场景

特性RPCHTTPWebSocket
消息大小极小(二进制)较大(文本头)极小(二进制帧)
延迟相对较高(新建连接时更高)极低(连接建立后)
实时性一般(依赖客户端调用)差(纯轮询或长轮询代价高)极强(服务端主动推送)
典型场景微服务内部调用(高吞吐、低延迟)、分布式系统Web网站、RESTful API、公开接口、资源传输实时聊天、游戏、协同编辑、股票行情、实时推送

一句话总结选择指南

  • 用 RPC:在你控制的后端服务之间,需要高性能、强类型、低延迟的内部调用。例如:一个订单服务调用用户服务。选 gRPC

  • 用 HTTP:对外提供API,需要通用、简单、防火墙友好、无状态。例如:手机App请求新闻列表、浏览器加载网页。选 RESTful API

  • 用 WebSocket:需要服务端随时主动推送数据或进行双向实时交互。例如:在线客服、多人在线游戏、股票K线图。不要用HTTP轮询,浪费资源且不及时

一个形象的类比

  • HTTP:像寄信。你写好信(请求),贴上邮票(头部),寄出,然后等回信。邮递员不会主动上门找你。

  • WebSocket:像打电话。先拨号(HTTP握手),接通后双方可以随时说话,边说边听,实时交流。

  • RPC:像内线电话(或公司内部的对讲机)。虽然也像打电话(基于TCP),但它隐去了“拨号”和“接线员”的过程,你直接拿起听筒说“呼叫张三”,它就能接通。你感觉就像在直接叫同事名字(调用本地函数)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询