news 2026/6/7 2:32:47

15. 实时数据-SpringBoot集成WebSocket

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15. 实时数据-SpringBoot集成WebSocket

文章目录

  • 前言
    • 一、添加依赖(Maven)
    • 二、配置 WebSocket
      • 1. 创建 WebSocket 配置类
      • 2. 实现 WebSocket 处理器
    • 三、前端测试(HTML + JS)
    • 四、启动类(标准 Spring Boot 启动类)
    • 五、可选:使用 STOMP over WebSocket(更高级)
    • 六、注意事项

前言

SpringBoot集成WebSocket

在 Spring Boot 中集成 WebSocket 可以实现服务器与客户端之间的双向通信,常用于实时消息推送、聊天室、在线通知等场景。


一、添加依赖(Maven)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

二、配置 WebSocket

1. 创建 WebSocket 配置类

importorg.springframework.context.annotation.Configuration;importorg.springframework.web.socket.config.annotation.EnableWebSocket;importorg.springframework.web.socket.config.annotation.WebSocketConfigurer;importorg.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration@EnableWebSocketpublicclassWebSocketConfigimplementsWebSocketConfigurer{@OverridepublicvoidregisterWebSocketHandlers(WebSocketHandlerRegistryregistry){// 注册处理器,允许跨域访问registry.addHandler(myWebSocketHandler(),"/websocket").setAllowedOrigins("*");// 生产环境应限制具体域名}publicMyWebSocketHandlermyWebSocketHandler(){returnnewMyWebSocketHandler();}}

2. 实现 WebSocket 处理器

importorg.springframework.web.socket.CloseStatus;importorg.springframework.web.socket.TextMessage;importorg.springframework.web/socket.WebSocketSession;importorg.springframework.web.socket.handler.TextWebSocketHandler;importjava.util.concurrent.ConcurrentHashMap;publicclassMyWebSocketHandlerextendsTextWebSocketHandler{// 存储所有连接的会话privatestaticfinalConcurrentHashMap<String,WebSocketSession>sessions=newConcurrentHashMap<>();@OverridepublicvoidafterConnectionEstablished(WebSocketSessionsession)throwsException{sessions.put(session.getId(),session);System.out.println("新连接: "+session.getId());}@OverrideprotectedvoidhandleTextMessage(WebSocketSessionsession,TextMessagemessage)throwsException{Stringpayload=message.getPayload();System.out.println("收到消息: "+payload);// 广播给所有连接的客户端for(WebSocketSessions:sessions.values()){if(s.isOpen()){s.sendMessage(newTextMessage("Echo: "+payload));}}}@OverridepublicvoidafterConnectionClosed(WebSocketSessionsession,CloseStatusstatus)throwsException{sessions.remove(session.getId());System.out.println("连接关闭: "+session.getId());}@OverridepublicvoidhandleTransportError(WebSocketSessionsession,Throwableexception)throwsException{sessions.remove(session.getId());session.close(CloseStatus.SERVER_ERROR);System.out.println("连接异常: "+session.getId());}}

三、前端测试(HTML + JS)

<!DOCTYPEhtml><html><head><title>WebSocket 测试</title></head><body><inputtype="text"id="message"placeholder="输入消息"><buttononclick="sendMessage()">发送</button><divid="output"></div><script>constws=newWebSocket('ws://localhost:8080/websocket');ws.onopen=function(event){console.log('连接已建立');};ws.onmessage=function(event){document.getElementById('output').innerHTML+='<p>'+event.data+'</p>';};ws.onclose=function(event){console.log('连接已关闭');};functionsendMessage(){constmsg=document.getElementById('message').value;ws.send(msg);}</script></body></html>

四、启动类(标准 Spring Boot 启动类)

importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassWebsocketApplication{publicstaticvoidmain(String[]args){SpringApplication.run(WebsocketApplication.class,args);}}

五、可选:使用 STOMP over WebSocket(更高级)

如果你需要更复杂的协议(如订阅/发布、路径匹配、安全认证等),可以考虑使用STOMP协议,Spring Boot 对其有良好支持。


六、注意事项

  • setAllowedOrigins("*")在生产环境中应替换为具体的可信域名。
  • WebSocket 连接是长连接,注意资源释放和异常处理。
  • 若部署在 Nginx 或云服务后,需确保代理支持 WebSocket(设置 Upgrade 和 Connection 头)。

如需基于注解(@ServerEndpoint)的方式(使用原生 Java EE WebSocket API),也可以配合spring-boot-starter-websocket使用,但 Spring 推荐使用WebSocketHandler或 STOMP 方式。


本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识


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

FaceFusion局域网访问设置方法

FaceFusion局域网访问设置方法 在使用 FaceFusion 这类基于 Web UI 的人脸替换与增强工具时&#xff0c;很多用户会遇到一个常见需求&#xff1a;希望在局域网内的其他设备&#xff08;如平板、手机或其他电脑&#xff09;上也能访问和操作 FaceFusion 界面。这在团队协作、远…

作者头像 李华
网站建设 2026/6/5 18:13:03

Stable Diffusion 3.5 发布:图像生成新突破

Stable Diffusion 3.5 FP8 发布&#xff1a;图像生成效率的新拐点 你有没有遇到过这种情况&#xff1f;明明写好了精炼的提示词&#xff0c;构图、光影、风格都描述得清清楚楚&#xff0c;结果模型要么“选择性失明”&#xff0c;要么生成一堆模糊拼贴——更别提在16GB显存的消…

作者头像 李华
网站建设 2026/6/2 16:22:51

未来的App不再需要菜单栏?

2013年&#xff0c;电影《她》&#xff08;Her&#xff09;描绘了一个令人着迷又略带不安的未来&#xff1a;人类与操作系统通过自然语言持续对话&#xff0c;AI不仅理解语义&#xff0c;还能感知情绪、记住过往、主动推理——它不再是工具&#xff0c;而是一个“认知伙伴”。 …

作者头像 李华
网站建设 2026/5/22 17:27:01

Flutter 勇闯2D像素游戏之路(三):人物与地图元素的交互

Flutter 勇闯2D像素游戏之路&#xff08;一&#xff09;&#xff1a;一个 Hero 的诞生 Flutter 勇闯2D像素游戏之路&#xff08;二&#xff09;&#xff1a;绘制加载游戏地图 Flutter 勇闯2D像素游戏之路&#xff08;三&#xff09;&#xff1a;人物与地图元素的交互 前言 在…

作者头像 李华
网站建设 2026/6/5 23:56:32

用PyTorch实现轴承故障诊断:多尺度卷积+注意力机制实战

基于多尺度卷积神经网络的滚动轴承故障诊断 针对传统方法在难以自适应提取滚动轴承有效故障特征信息的问题&#xff0c;提出了一种多尺度卷积神经网络的滚动轴承故障诊断方法。 首先&#xff0c;构建了多尺度特征融合模块自适应提取故障样本不同感受野下的特征表示&#xff0c;…

作者头像 李华
网站建设 2026/6/3 23:43:27

基于matlab的凸轮轮廓的设计计算与绘图 计算此结构的最优化参数,根据其原理输出推程和回程的...

基于matlab的凸轮轮廓的设计计算与绘图 计算此结构的最优化参数&#xff0c;根据其原理输出推程和回程的最大压力角、最小曲率半径等相关结果。 程序已调通&#xff0c;可直接运行。打开MATLAB的脚本编辑器&#xff0c;迎面扑来的是熟悉的蓝色界面。咱们今天要折腾的这个凸轮设…

作者头像 李华