【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 / 长连接
简单、无状态
订阅、观察者模式
双向实时、高复杂度

相关推荐
松仔log23 分钟前
Kotlin中级——callbackFlow
java·前端·kotlin
知守观1 小时前
同一个团队两套分包:DDD 四层落地后,domain 层最大的类还是 5885 行
java·后端·领域驱动设计
文丑颜不良啊1 小时前
LeetCode2541~2560题目解析
java·leetcode
瑞雪兆丰年兮1 小时前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
Highcharts.js2 小时前
Highcharts智能数据分析平台Orbit 多语言配置技术文档
java·前端·javascript·highcharts·orbit·智能数据分析·设置文档
Rain的Java大神之路2 小时前
设计一套生产级 API 接口:从契约、安全、幂等到限流,我踩过的坑都在这了
java·后端·面试
SimonKing2 小时前
零配置也能白嫖前沿大模型!dsh-our-free-model插件真香警告
java·后端·程序员
nice_lcj5202 小时前
【从零理解 Spring AI · 15】让检索更准:先宽召回,再精排序
java·后端·rag·spring ai·ai应用开发·检索优化·重排序
杨凯凡3 小时前
Spring Boot 链路追踪实战:Micrometer、TraceId 与异步线程上下文传播
java·spring boot·后端
计算机毕设定制辅导-无忧学长3 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台