0

0

怎样在Java中搭建WebSocket实时通信环境_Java网络编程环境

P粉602998670

P粉602998670

发布时间:2026-03-09 11:02:03

|

472人浏览过

|

来源于php中文网

原创

直接选 spring websocket,因其能与 spring 生态(@autowired、事务、security)深度集成,避免原生 serverendpoint 的配置分散、注入失败和拦截困难等问题。

怎样在java中搭建websocket实时通信环境_java网络编程环境

WebSocket服务器端用 ServerEndpoint 还是 Spring WebSocket

直接选 Spring WebSocket,除非你明确要脱离 Spring 生态或部署在纯 Java EE 容器里。原生 ServerEndpoint 依赖容器(如 Tomcat 8+)的 JSR-356 实现,配置分散、拦截难、没法和 Spring 的 @Autowired、事务、安全机制联动。

常见错误现象:NullPointerException@OnOpen 方法里注入 service;或者握手成功但后续消息收不到——大概率是没配好 WebSocketHandler 的注册路径或没启用 @EnableWebSocket

  • Spring Boot 项目只需加 spring-boot-starter-websocket 依赖
  • 配置类里用 @Bean 注册 WebSocketHandler,再通过 WebSocketConfigurerregisterWebSocketHandlers 绑定路径(比如 /ws
  • 别漏掉前端连接时的协议前缀:ws://(开发)或 wss://(生产),浏览器控制台报 Failed to construct 'WebSocket' 多半是协议或路径错了

客户端连不上 WebSocket?先检查这三件事

90% 的连接失败不是代码问题,而是环境链路断在中间。WebSocket 建立在 HTTP 升级(Upgrade: websocket)之上,任何中间层都可能阻断它。

使用场景:本地开发能通,上测试环境就 net::ERR_CONNECTION_REFUSED 或卡在 pending;Nginx 反向代理后出现 101 Switching Protocols 但立刻断开。

立即学习Java免费学习笔记(深入)”;

Dora
Dora

创建令人惊叹的3D动画网站,无需编写一行代码。

下载
  • Nginx 必须显式透传升级头:proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
  • 后端服务若启用了 Spring Security,需放行 WebSocket 握手路径(如 /ws/**),否则 403 静默拦截
  • 浏览器开发者工具 Network 标签页里找 ws 类型请求,点开看 Headers → Request Headers 是否含 Sec-WebSocket-KeyUpgrade: websocket;没有说明根本没走 WebSocket 协议

TextMessageBinaryMessage 怎么选?

绝大多数业务场景用 TextMessage 就够了。WebSocket 协议本身不关心内容格式,但 Java 端的 WebSocketSession.sendMessage() 对文本和二进制做了类型隔离,混用会抛 IllegalArgumentException

性能影响:文本消息会被自动编码为 UTF-8 字节数组,如果传输大量非文本数据(如图片 base64、压缩 JSON),用 BinaryMessage 能省一次编码开销,但调试难度上升——Wireshark 抓包看到的是乱码,日志里也打不出可读内容。

  • 前端 send() 发字符串,默认走服务端 handleTextMessage()
  • ArrayBufferBlob,才触发 handleBinaryMessage()
  • 不要在 TextMessage 里塞超长 JSON 字符串(>1MB),Tomcat 默认限制 1MB,会直接关闭连接,改配置得设 maxTextMessageBufferSize

连接断开后怎么重连?别在前端硬写 setTimeout

浏览器原生 WebSocket 对象没有内置重连逻辑,手动轮询容易触发连接风暴或忽略状态判断。更可靠的方式是用状态机 + 指数退避,且必须区分“主动关闭”和“异常断开”。

容易踩的坑:用户切后台再切回来,页面没销毁但 WebSocket 实例已失效,继续调 send()InvalidStateError;或者重连时没清空旧的 onmessage 回调,导致消息被重复处理。

  • 监听 onclose 事件,检查 event.code:1000 是正常关闭,其他(如 1006)算异常,才触发重连
  • setTimeout 启动重连时,每次延时应递增(如 1s → 2s → 4s),避免雪崩
  • 每次新建 WebSocket 实例前,确保旧实例的 onmessage/onerror 已置为 null,防止内存泄漏

复杂点在于服务端也要配合:心跳超时时间(setMaxIdleTimeout)得比前端重连间隔短,否则连接在中间被单方面释放,前端还在傻等。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

98

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

170

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

158

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

244

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2024.02.23

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.2万人学习

C# 教程
C# 教程

共94课时 | 11万人学习

Java 教程
Java 教程

共578课时 | 79.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号