系统通信方式实战详解:HTTP、RPC、MQ、WebSocket 各用在什么场景?(附 SDK 示例)

文章目录

    • [一、HTTP / HTTPS:用户主动发起的业务操作](#一、HTTP / HTTPS:用户主动发起的业务操作)
      • [1️⃣ 典型场景](#1️⃣ 典型场景)
      • [2️⃣ 为什么用 HTTP?](#2️⃣ 为什么用 HTTP?)
      • [3️⃣ 示例代码(Spring Boot)](#3️⃣ 示例代码(Spring Boot))
    • 二、RPC:内部服务之间的高性能调用
      • [1️⃣ 典型场景](#1️⃣ 典型场景)
      • [2️⃣ 为什么用 RPC?](#2️⃣ 为什么用 RPC?)
      • [3️⃣ 示例代码(伪 RPC 示例)](#3️⃣ 示例代码(伪 RPC 示例))
    • [三、消息队列 MQ:系统解耦的核心手段](#三、消息队列 MQ:系统解耦的核心手段)
      • [1️⃣ 典型场景](#1️⃣ 典型场景)
      • [2️⃣ 为什么用 MQ?](#2️⃣ 为什么用 MQ?)
      • [3️⃣ 示例代码(Kafka)](#3️⃣ 示例代码(Kafka))
    • [四、WebSocket:实时通知 / 信令通信](#四、WebSocket:实时通知 / 信令通信)
      • [1️⃣ 典型场景](#1️⃣ 典型场景)
      • [2️⃣ 为什么用 WebSocket?](#2️⃣ 为什么用 WebSocket?)
      • [3️⃣ 示例代码(服务端)](#3️⃣ 示例代码(服务端))
    • 五、推送(Push):离线兜底通知
      • [1️⃣ 典型场景](#1️⃣ 典型场景)
      • [2️⃣ 为什么需要推送?](#2️⃣ 为什么需要推送?)
      • [3️⃣ 典型逻辑(伪代码)](#3️⃣ 典型逻辑(伪代码))
    • [六、SDK 的正确位置(不是通信方式)](#六、SDK 的正确位置(不是通信方式))
      • [1️⃣ SDK 是什么?](#1️⃣ SDK 是什么?)
      • [2️⃣ 典型场景](#2️⃣ 典型场景)
      • [3️⃣ 示例代码](#3️⃣ 示例代码)
      • [4️⃣ 常见 SDK 与真实通信方式](#4️⃣ 常见 SDK 与真实通信方式)
    • [七、通信方式 × 场景总结表(CSDN 收藏级)](#七、通信方式 × 场景总结表(CSDN 收藏级))
    • 八、全文总结

在实际项目中,通信方式不是随便选的

HTTP、RPC、MQ、WebSocket 各有明确分工,如果用错地方,系统复杂度会直线上升。

本文从 "真实业务场景 + 示例代码" 出发,系统性梳理主流通信方式,并在最后单独说明 SDK 的正确使用方式


一、HTTP / HTTPS:用户主动发起的业务操作

1️⃣ 典型场景

用户提交证件更新申请

这是一个同步、强一致的操作,用户需要立刻知道"是否提交成功"。

2️⃣ 为什么用 HTTP?

  • 请求--响应模型
  • 易做鉴权、幂等
  • 明确成功 / 失败结果

3️⃣ 示例代码(Spring Boot)

java 复制代码
@RestController
@RequestMapping("/kyc")
public class KycController {

    @PostMapping("/update")
    public Result submitUpdate(@RequestBody KycRequest request) {
        // 参数校验
        // 落库
        // 创建交易记录
        return Result.ok("提交成功,等待审核");
    }
}

📌 总结

HTTP 适合"用户主动发起、需要明确结果"的业务操作


二、RPC:内部服务之间的高性能调用

1️⃣ 典型场景

订单服务调用库存服务扣减库存

这是内部系统调用,对性能要求高,不需要对外暴露。

2️⃣ 为什么用 RPC?

  • 比 HTTP 开销小
  • 接口强约束
  • 调用方式像本地方法

3️⃣ 示例代码(伪 RPC 示例)

java 复制代码
// 订单服务
inventoryService.deductStock(skuId, count);
java 复制代码
// 库存服务
public void deductStock(Long skuId, int count) {
    // 扣减库存逻辑
}

📌 总结

RPC 适合"内部微服务之间的高性能调用"


三、消息队列 MQ:系统解耦的核心手段

1️⃣ 典型场景

证件审核通过后,通知多个系统处理后续逻辑

例如:

  • 通知服务
  • 风控系统
  • 数据统计系统

2️⃣ 为什么用 MQ?

  • 解耦上下游
  • 支持异步
  • 支持失败重试

3️⃣ 示例代码(Kafka)

生产消息:

java 复制代码
kafkaTemplate.send("kyc_result_topic", message);

消费消息:

java 复制代码
@KafkaListener(topics = "kyc_result_topic")
public void handleResult(String message) {
    // 解析消息
    // 执行业务逻辑
}

📌 总结

系统之间"谁完成了,其他系统要知道",就用 MQ


四、WebSocket:实时通知 / 信令通信

1️⃣ 典型场景

证件审核完成后,实时通知 App 用户结果

用户在线时,希望立刻看到结果

2️⃣ 为什么用 WebSocket?

  • 长连接
  • 服务端可主动推送
  • 实时性强

3️⃣ 示例代码(服务端)

java 复制代码
@OnOpen
public void onOpen(Session session) {
    sessions.add(session);
}

public void pushMessage(String msg) {
    for (Session session : sessions) {
        session.getBasicRemote().sendText(msg);
    }
}

客户端接收:

javascript 复制代码
ws.onmessage = function (event) {
    console.log("收到通知:" + event.data);
};

📌 总结

WebSocket 用来"推送结果",而不是"发起业务"


五、推送(Push):离线兜底通知

1️⃣ 典型场景

用户 App 已退出,仍需收到审核结果提醒

2️⃣ 为什么需要推送?

  • WebSocket 只能保证在线用户
  • 推送覆盖离线场景

3️⃣ 典型逻辑(伪代码)

java 复制代码
if (!userOnline) {
    pushService.send(userId, "你的证件已审核通过");
}

📌 总结

WebSocket 负责实时,推送负责兜底


六、SDK 的正确位置(不是通信方式)

1️⃣ SDK 是什么?

SDK 是对通信方式的封装,不是通信方式本身

2️⃣ 典型场景

调用短信 SDK 发送验证码

3️⃣ 示例代码

java 复制代码
smsClient.send(phone, "验证码是 123456");

但 SDK 内部实际是:

text 复制代码
SDK → HTTP 请求 → 短信平台

4️⃣ 常见 SDK 与真实通信方式

SDK 类型 实际通信方式
短信 / OCR SDK HTTP
云服务 SDK HTTP / RPC
IM / RTC SDK WebSocket

📌 总结

通信方式决定架构,SDK 只影响开发体验


七、通信方式 × 场景总结表(CSDN 收藏级)

场景 通信方式
用户提交操作 HTTP
内部服务调用 RPC
系统解耦通知 MQ
实时结果推送 WebSocket
用户离线提醒 推送
能力快速接入 SDK

八、全文总结

HTTP 负责发起
RPC 负责内部
MQ 负责解耦
WebSocket 负责实时
推送负责兜底
SDK 只是封装手段

相关推荐
TickDB10 小时前
美股行情 API 接入避坑:REST 快照、WebSocket 推送、盘前盘后数据的边界
人工智能·python·websocket·行情数据 api
战南诚20 小时前
HTTP 与 HTTPS 的区别:从原理到实战详解
网络协议·http·https
haven-85220 小时前
AI Agent 生态核心概念详解:Agent、MCP、Skill 与 JSON-RPC
人工智能·rpc·json
风停了,叶落了21 小时前
2026年5月28日笔记
http
mCell1 天前
别急着骂运营商,你家路由器里可能藏着一台 PCDN 盒子
前端·http·cdn
Wonderful U1 天前
基于 Django Channels 与 WebSocket 的实时聊天室:群聊、私聊、离线消息与持久化存储全实现
python·websocket·django
Seven971 天前
别只会说 HTTPS 更安全:一文吃透加密、证书与 TLS 握手
tcp/ip·http
shuxiaohua1 天前
一次现网问题定位-websocket断连问题
网络·websocket·网络协议
艾莉丝努力练剑1 天前
【Linux网络】传输层协议TCP(六)补充 - 面试题:HTTP 获取网页的完整过程
linux·运维·网络·tcp/ip·计算机网络·http·udp
越甲八千1 天前
本地验证http服务器拉取文件
服务器·网络协议·http