【Java EE】网络通信中的 4 种交互模式

网络通信中的 4 种交互模式

一问一答(请求-响应模式)

这是最经典、最基础的交互模式。
Server Client Server Client 请求 响应

代表协议

  • HTTP / HTTPS
  • DNS 查询
  • SQL 查询(非流式)

适用场景

  • 网页浏览
  • RESTful API
  • 普通的增删改查操作

特点

  • 简单、无状态
  • 客户端必须主动发起
  • 服务器不能主动推送

✅ 适合"我问你答一次就结束"的场景

一问多答(订阅 / 推送模式)

客户端只发一次请求,服务器持续返回多条数据。
Server Client Server Client loop 持续推送 订阅请求 数据 1 数据 2 数据 N

代表技术

  • SSE(Server‑Sent Events)
  • WebSocket(单向推送视角)
  • RSS 订阅
  • Kafka / MQTT 订阅

适用场景

  • 股票行情
  • 比赛实时比分
  • 新闻 / 微博时间线推送
  • 实时日志监控

特点

  • 一次订阅,多次推送
  • 服务器有"主动说话"能力(有限)
  • 适合 观察者模式

多问一答(批量 / 聚合模式)

客户端发起多个请求,服务器聚合后返回一次响应。
Server Client Server Client 请求 A 请求 B 请求 C 统一聚合响应

代表技术

  • HTTP/2 多路复用
  • GraphQL
  • 分片上传(最后一次性确认)

典型场景

1. 大文件分片上传

  • 客户端将文件切成 1MB 的小块
  • 并发上传多个分片
  • 服务器全部收齐后返回"上传成功"

2. GraphQL

  • 一次请求获取用户、订单、商品列表
  • 减少网络往返次数

特点

  • 减少网络往返(RTT)
  • 更高效的批量处理
  • 客户端与服务器之间有"多对一"的约定

多问多答(双向实时通信模式)

建立连接后,双方都可以随时主动发送消息。
Server Client Server Client loop 全双工通信 连接建立 控制指令 画面数据 状态通知 心跳 / 操作

代表技术

  • WebSocket
  • TCP / UDP 长连接
  • MQTT
  • SignalR / Socket.IO

典型场景

场景 说明
远程控制(ToDesk / TeamViewer) 控制端输入指令,被控端持续回传屏幕画面
在线聊天(微信 / 钉钉) 双方任意时刻都能发送消息
多人在线游戏 玩家动作广播 + 服务器推送状态
实时协同文档 多人同时编辑,互相看到光标和内容

特点

  • 真正的 双向实时
  • 需要维护长连接
  • 复杂度远高于一问一答

四种模式对比总结

模式 请求次数 响应次数 方向 代表技术 典型场景
一问一答 1 1 单向请求 HTTP 普通 API
一问多答 1 N 订阅推送 SSE、WebSocket 行情推送
多问一答 N 1 批量聚合 GraphQL、分片上传 批量查询
多问多答 N N 双向实时 WebSocket、MQTT 聊天、游戏

如何选择合适的模式?

1次响应
多次响应
不需要
需要
客户端与服务器交互

需要几次响应?
一问一答

HTTP / API
是否需要客户端

持续主动发送?
一问多答

SSE / 订阅推送
多问多答

WebSocket / 长连接
简单、无状态
订阅、观察者模式
双向实时、高复杂度

相关推荐
亚历克斯神40 分钟前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
金銀銅鐵1 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼2 小时前
JAVA服务问题诊断
java·开发语言·jvm
Sayuanni%32 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
坚定信念,勇往无前3 小时前
Maven 私有仓库-nexus
java
Minner-Scrapy3 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶3 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
CappuccinoRose3 小时前
JSON 数据交互规范
json·交互
夏天拐跑了西瓜3 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
2601_967264284 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习