news 2026/7/14 19:08:40

SSE、长轮询与 WebSocket 连接资源对比及 Spring Boot 配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SSE、长轮询与 WebSocket 连接资源对比及 Spring Boot 配置指南

一、背景

在构建实时消息推送系统时,开发者常面临三种主流技术选型:

  • 长轮询(Long Polling)
  • SSE(Server-Sent Events)
  • WebSocket

三者在连接模型、资源消耗、扩展性等方面差异显著。本文旨在对比其连接资源占用特性,并提供Spring Boot 项目中的最佳实践与配置建议


二、连接模型与资源消耗对比

特性长轮询SSEWebSocket
通信方向客户端拉(伪推)服务器 → 客户端(单向)双向
连接类型短连接(但 hold 住)持久 HTTP 连接TCP 升级后独立连接
是否长期占用 HTTP 连接✅ 是(每次请求 hold 30~60s)✅ 是(连接持续打开)❌ 否(脱离 HTTP 协议栈)
线程模型每请求占 1 线程(阻塞)异步非阻塞(不占处理线程)异步非阻塞(NIO)
并发连接压力⚠️ 极高(易线程爆炸)⚠️ 高(受 socket 数限制)✅ 低(单线程可处理数千连接)
适用场景兼容老旧系统(最后选择)通知、日志、行情等单向推送聊天、游戏、协作编辑等双向交互

核心结论

  • 长轮询资源消耗最大,应避免用于高并发场景
  • SSE 比长轮询高效,适合中等规模单向推送
  • WebSocket 是高并发、低延迟、双向通信的首选

三、Spring Boot 中的连接数配置

3.1 Web 容器选择建议

容器适用场景优势
Tomcat默认,通用场景稳定、生态完善
Undertow推荐用于 SSE / 长轮询内存占用低,支持高并发连接
Netty(WebFlux)超高并发或 Reactive 架构完全非阻塞,单机支持 10w+ 连接

🔧切换为 Undertow(Maven)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>

3.2 Tomcat 配置(application.yml)

server:tomcat:max-connections:20000# 最大 socket 连接数(默认 8192)accept-count:200# 请求等待队列大小threads:max:500# 处理线程数(SSE 建立后不占此线程)min-spare:50connection-timeout:60000# 连接超时(毫秒)

⚠️注意:SSE 连接建立后不占用threads.max,但受max-connections限制。


3.3 Undertow 配置(推荐)

server:undertow:io-threads:8# IO 线程数 ≈ CPU 核数worker-threads:200# 阻塞任务线程buffer-size:1024queues:task:1024# 任务队列大小

✅ Undertow 默认支持数万并发连接,内存效率优于 Tomcat。


3.4 系统级限制(Linux)

每个 TCP 连接 ≈ 1 个文件描述符(fd),需调整系统限制:

# 查看当前限制ulimit-n# 临时提升(需 root)ulimit-n65536# 永久生效:编辑 /etc/security/limits.conf* soft nofile65536* hard nofile65536

💡 建议:ulimit -n≥ 预期最大连接数 × 1.2


四、容量估算与选型建议

用户规模推荐方案关键配置
< 1,000SSE + Tomcat默认配置即可
1,000 ~ 50,000SSE + Undertow + Redis Pub/Submax-connections=50000+ulimit -n 65536
> 50,000 或需双向通信WebSocket + NettyWebFlux Reactive SSE集群部署 + 连接分片

五、SSE 项目优化 Checklist

  • 使用Undertow替代 Tomcat(降低内存)
  • 配置server.undertow.max-connections足够大
  • 系统ulimit -n调高(> 连接数 × 1.2)
  • 使用 Spring 的SseEmitter(已支持异步)
  • 及时清理失效连接(注册onTimeout/onError回调)
  • 集群环境使用Redis Pub/Sub广播消息
  • 通过/actuator/metrics监控在线连接数

六、附:Reactive SSE(WebFlux)示例(超高并发)

@GetMapping(value="/events",produces=MediaType.TEXT_EVENT_STREAM_VALUE)publicFlux<ServerSentEvent<String>>events(){returnFlux.interval(Duration.ofSeconds(1)).map(seq->ServerSentEvent.builder("tick-"+seq).build());}

✅ 基于 Reactor 模型,单机可支持10万+ 并发连接,适合大型实时系统。


七、总结

问题回答
SSE 会占用很多 HTTP 连接吗?✅ 会,每个用户占 1 个持久 HTTP 连接,但比长轮询高效得多
WebSocket 会占用很多连接吗?❌ 不会,基于 NIO,连接成本极低
Spring Boot 需要配置连接数吗?必须配置!尤其是max-connections和系统ulimit

🎯选型口诀
单向推送用 SSE,双向交互选 WebSocket,长轮询仅作兜底。


📌文档结束
如需完整可运行的 Spring Boot + SSE + Redis 集群示例工程,请联系作者获取。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 19:59:59

读懂 sap.m.URLHelper 文档里的 library: sap.m 与 Module: sap/m/library

你在 SAP UI5 API Reference 里看到的这两个字段&#xff0c;看起来都在讲 sap.m&#xff0c;但它们回答的是两类完全不同的问题&#xff1a; library: sap.m&#xff1a;这条 API 属于哪个 UI5 库&#xff08;library 维度&#xff1a;交付、依赖、主题、预加载等的组织单位&…

作者头像 李华
网站建设 2026/7/1 7:39:08

基于SpringBoot的考编论坛网站毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于SpringBoot框架的考编论坛网站&#xff0c;以实现以下研究目的&#xff1a; 首先&#xff0c;通过设计并实现一个功能完善的考编论坛网站…

作者头像 李华
网站建设 2026/7/1 11:36:04

干货满满!大数据流处理的数据清洗技巧

干货满满&#xff01;大数据流处理的数据清洗技巧&#xff1a;从“流水质检”到“智能提纯” 一、引入与连接&#xff1a;当“流水”变“乱流”&#xff0c;你需要实时“治水” 清晨7点&#xff0c;某电商平台的实时推荐系统突然“抽风”——给用户推送了10条“婴儿奶粉”广告&…

作者头像 李华
网站建设 2026/7/1 10:20:30

基于SpringBoot的仓库管理系统毕设源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的仓库管理系统&#xff0c;以满足现代企业对高效、可靠、易用的仓库管理解决方案的需求。具体研究目的如下&#x…

作者头像 李华
网站建设 2026/7/1 11:35:48

HY-MT1.5如何接入现有系统?API接口调用实战教程

HY-MT1.5如何接入现有系统&#xff1f;API接口调用实战教程 1. 引言&#xff1a;为什么选择HY-MT1.5进行翻译集成&#xff1f; 随着全球化业务的不断扩展&#xff0c;多语言实时翻译能力已成为企业出海、内容本地化和跨语言沟通的核心需求。传统商业翻译API&#xff08;如Goog…

作者头像 李华