系统通信方式实战详解: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 只是封装手段

相关推荐
不可能的是2 天前
前端 SSE 流式请求三种实现方案全解析
前端·http
古译汉书6 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
小扎仙森6 天前
关于阿里云实时语音翻译-Gummy推送WebSocket
websocket·阿里云·云计算
江西理工大学小杨6 天前
高性能 C++ 社交平台4:基于 Boost.Beast 的 WebSocket 网关实现
c++·websocket·微服务
21号 16 天前
Http粘包问题回顾
网络·网络协议·http
A懿轩A6 天前
【SpringBoot 快速开发】面向后端开发的 HTTP 协议详解:请求报文、响应码与常见设计规范
spring boot·http·设计规范
吧啦蹦吧6 天前
http-SNI
网络·网络协议·http
yezipi耶不耶6 天前
我在 RTMate 里使用的高并发连接管理利器: DashMap
websocket·rust
柒.梧.6 天前
基于Netty+WebSocket+DeepSeek AI 实现即时聊天功能
人工智能·websocket·网络协议
Sincerelyplz7 天前
【WebSocket】消息丢失的补偿/补发机制
后端·websocket