资讯动态

RPC、HTTP、WebSocket的区别

发布时间:2026/10/19 11:43:57 来源:尧图企业网站定制
分享一个大牛的人工智能教程。零基础通俗易懂风趣幽默希望你也加入到人工智能的队伍中来请轻击人工智能教程​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但它隐去了“拨号”和“接线员”的过程你直接拿起听筒说“呼叫张三”它就能接通。你感觉就像在直接叫同事名字调用本地函数。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑