news 2026/4/30 13:37:02

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/4/26 8:11:38

IP协议 地址划分MAC地址作用ip addr命令

一、ip addr命令解读 roottest:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 …

作者头像 李华
网站建设 2026/4/29 21:41:06

Java对象创建的过程

一、类加载过程类加载检查 当Java虚拟机&#xff08;JVM&#xff09;遇到new关键字时&#xff0c;它会先检查要创建的对象类是否已经被加载、链接和初始化。如果尚未加载&#xff0c;JVM会通过类加载器&#xff08;ClassLoader&#xff09;加载对应类的.class文件。 类加载 类加…

作者头像 李华
网站建设 2026/4/30 12:49:59

香港科技大学突破AI画图“作弊“难题:让机器学会诚实创作

这项由香港科技大学的何浩然、清华大学的叶雨潇以及快手科技等多家机构的研究人员共同完成的研究&#xff0c;发表于2025年12月30日的arXiv预印本平台&#xff08;论文编号&#xff1a;arXiv:2512.24138v1&#xff09;&#xff0c;有兴趣深入了解的读者可以通过这个编号查询完整…

作者头像 李华
网站建设 2026/4/28 19:09:39

交通仿真软件:Paramics_(3).数据输入与处理

数据输入与处理 在交通仿真软件中&#xff0c;数据输入与处理是至关重要的步骤。这一部分将详细介绍如何在Paramics中输入和处理各种交通数据&#xff0c;包括路网数据、交通流量数据、车辆数据等。我们将通过具体的例子来说明这些数据的输入方法和处理技巧。 路网数据输入 路网…

作者头像 李华
网站建设 2026/4/25 5:17:37

交通仿真软件:Paramics_(5).交通流仿真

交通流仿真 1. 交通流仿真的基础概念 交通流仿真是一种通过计算机模拟技术来研究和分析交通系统运行情况的方法。它可以帮助交通规划师、工程师和研究人员了解交通系统在不同条件下的行为&#xff0c;从而优化交通设计、管理和控制。Paramics 是一款功能强大的交通仿真软件&…

作者头像 李华
网站建设 2026/4/23 11:30:54

《呼吸秋千》我早已习惯,饥饿在呼吸上荡起秋千

《呼吸秋千》我早已习惯&#xff0c;饥饿在呼吸上荡起秋千 赫塔米勒&#xff08;1953~&#xff09;&#xff0c;德国作家&#xff0c;2009年&#xff0c;因其“以诗的凝练&#xff0c;散文的率直&#xff0c;描绘流离失所者的处境”而获得诺贝尔文学奖。 余杨 吴文权 译 后浪文…

作者头像 李华