rpc和http的区别

grpc和http的区别

协议层面

  • http是应用层协议,每次携带大量头部字段,包括connection、host、user-agent、cookie等
  • rpc通常用自定义二进制格式,头部极小,具体看 gRPC 数据包传输格式解析

序列化层面

  • http常用json,字段名重复、解析慢
  • rpc常用protobuf,只传字段编号+值,体积小5-10倍,解析快10倍

连接层面

  • http/1.1 keep-alive可以复用连接,但是串行化,有队头阻塞的问题
  • grpc用http/2,支持tcp长连接+多路复用(一条连接并发多个请求)

对比

复制代码
性能对比(同一个请求):

HTTP+JSON:
  请求: POST /api/users/getUser HTTP/1.1
        Host: user-service
        Content-Type: application/json
        Content-Length: 16
        Cookie: session=xxx
        
        {"userId": 123}
  
  请求大小: ~200字节(头部占80%!)
  序列化: JSON.stringify → O(N)字符处理
  
HTTP/2+gRPC+Protobuf:
	HTTP/2 DATA Frame
	  9B Frame Header
	    Length: 3B
	    Type: 1B
	    Flags: 1B
	    R + Stream Identifier: 4B
	
	  Payload:
	    gRPC Message
	      Compressed Flag: 1B
	      Message Length: 4B
	      Protobuf Body: N Bytes
  
  请求大小: ~15字节(含HTTP/2帧头)
  序列化: protobuf编码 → O(1)单字段,整体O(N)但极快
  
  性能差距:
    序列化速度: Protobuf比JSON快5-10x
    数据体积: Protobuf比JSON小3-5x
    网络延迟: 减少60-80%
    QPS: gRPC比HTTP+JSON高2-5x(同等硬件)

HTTP/2 多路复用:
  HTTP/1.1: 请求1发 → 等响应1 → 请求2发(队头阻塞)
  HTTP/2:   请求1发 → 请求2发 → 请求3发 → 响应乱序到达
            (stream ID区分,同一TCP连接)
  → gRPC天然基于HTTP/2
相关推荐
风曦Kisaki2 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
abbgogo3 小时前
TCP/IP、OSI 与常见网络协议知识点总结
网络·网络协议·计算机网络
李昊哲小课4 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
虹科数字化与AR4 小时前
安宝特方案丨汽车模具增材制造:从数字模型到精密模具的直达通道
经验分享
abbgogo6 小时前
堆叠、DHCP 与链路聚合总结
网络·网络协议
小星星闪亮登场7 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
wgego7 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
AF_INET610 小时前
RK开发板(五)ISP Tunner工具的基本使用
经验分享·sensor·rockchip·rv1126b·isp tunner·图像调试·isp调试
YIN_尹10 小时前
测完ToDesk、UU远程和向日葵,双模式、画质、掉帧差距多大?远程打游戏这事有点意思
经验分享
依然范特东10 小时前
强化学习笔记6--IS、PPO、TD、DQN、Actor-Critic
笔记·算法