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

相关推荐
长按助力退休12 小时前
HTTP缓存从强缓存到协商缓存,前端性能优化第一步
http
imDwAaY18 小时前
WebSocket 和 SSE 有什么区别?从实时通信到 AI 流式输出
后端·websocket
进化中的刀盾兽19 小时前
从零实现 C++ Json-Rpc(八):补齐 detail.hpp——JSON 封装与请求 ID 生成
c++·rpc
Knight_AL1 天前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议
谢亮_vipxieliang1 天前
Go net/http 标准库深入——构建生产级 HTTP 服务
http·golang·iphone
小小龙学IT2 天前
Go 语言 gRPC(grpc-go)深度解析
rpc·架构·golang·go
sjg200104142 天前
websocket基本使用
网络·websocket
Da Da 泓2 天前
谈谈HTTP
网络·网络协议·http
花间相见2 天前
【计算基础|网络02】HTTP 原理:报文结构、方法语义与状态码
网络·网络协议·http
脉动数据行情12 天前
Go 语言实战|对接美股英伟达 NVDA 实时行情 生产级 WebSocket 方案
开发语言·websocket·golang