news 2026/8/5 21:10:38

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/8/5 12:19:29

36、基础Web服务器与邮件服务配置指南

基础Web服务器与邮件服务配置指南 1. 配置基础Web服务器 在搭建基础Web服务器时,Apache是一个常用的选择。不过,在不同的UNIX系统中,Apache相关文件的位置可能会有所不同。例如,在FreeBSD系统中,Apache的二进制文件存放在 /usr/local/sbin 和 /usr/local/bin 目录,…

作者头像 李华
网站建设 2026/8/5 7:48:07

永磁同步电机三闭环控制Simulink仿真 电流内环 转速 位置外环 参数已经调好 原理与双闭...

永磁同步电机三闭环控制Simulink仿真 电流内环 转速 位置外环 参数已经调好 原理与双闭环类似 有资料&#xff0c;仿真最近在调永磁同步电机控制方案&#xff0c;发现三闭环控制在需要高精度定位的场景特别实用。今天就拿手头调好的Simulink模型拆解下实现套路&#xff0c;保证…

作者头像 李华
网站建设 2026/8/5 7:31:59

ISIS路由的基本配置

实验要求&#xff1a; 如图所示&#xff0c;客户网络所有路由器路由协议要求启用IS-IS&#xff0c;使全网路由可达。全部IS-IS进程号统一为100&#xff0c; 其中AR1在Area49.0001区域为DIS&#xff0c;R3与R4之间要求采用P2P网络类型&#xff0c;R5引入直连链路192.168.X.X&am…

作者头像 李华
网站建设 2026/8/4 22:59:45

Unloop:为ADHD与神经多样性人群打造的可视化模式映射工具 | ProductHunt 今日热榜 - 12月16日

今日榜单登顶产品Unloop 以 354 票登顶今日热榜&#xff01;这是一款通过可视化画布帮助ADHD与神经多样性人群映射自身思维与行为模式&#xff0c;从而打破循环、实现自我觉察的工具。本期亮点产品介绍本期 Product Hunt 热榜体现了工具类产品对“理解”与“效率”的双重追求。…

作者头像 李华
网站建设 2026/8/5 0:18:39

LED显示屏视频会议价格

LED显示屏视频会议价格解析&#xff1a;如何选择高性价比的解决方案在数字化转型加速的今天&#xff0c;LED显示屏视频会议系统已成为企业高效协作、远程沟通的核心工具。无论是跨国公司的全球战略会议&#xff0c;还是中小团队的日常项目讨论&#xff0c;一套清晰、稳定、易用…

作者头像 李华
网站建设 2026/8/5 4:33:58

Kamailio 怎样使用 STIR/SHAKEN

AI 产生的文章&#xff0c;仅供参考 Kamailio 使用 STIR/SHAKEN 的流程相对复杂&#xff0c;因为它需要与外部的 STIR/SHAKEN 服务&#xff08;例如 Secure Telephone Identity (STI) 证书颁发机构 (CA) 和验证服务&#xff09;进行集成。Kamailio 本身不执行 STIR/SHAKEN 的签…

作者头像 李华