news 2026/3/13 22:58:12

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/3/13 0:51:28

25、配置 FreeBSD 拨号上网连接

配置 FreeBSD 拨号上网连接 在当今数字化时代,网络连接是我们生活和工作中不可或缺的一部分。对于使用 FreeBSD 系统的用户来说,配置拨号上网连接可能是一项具有挑战性但又十分必要的任务。本文将详细介绍如何在 FreeBSD 系统中配置拨号上网连接,包括所需的步骤、文件配置以…

作者头像 李华
网站建设 2026/3/12 23:32:52

29、X Window系统配置与启动指南

X Window系统配置与启动指南 1. 鼠标和键盘配置 1.1 鼠标类型与协议选择 如今,PS/2鼠标或USB鼠标较为常见,串口鼠标正逐渐被淘汰。使用 xf86config 程序配置X Window系统时,首先要以root用户登录,在命令提示符下输入 xf86config 启动程序。启动后,会要求选择鼠标协…

作者头像 李华
网站建设 2026/3/13 0:42:55

32、FreeBSD窗口管理器与桌面环境及办公软件全解析

FreeBSD窗口管理器与桌面环境及办公软件全解析 1. 窗口管理器与桌面环境的区别 在FreeBSD系统中,KDE是较为流行的桌面环境,但并非唯一选择,还有众多从简单到复杂的替代方案。窗口管理器和桌面环境存在明显差异: - 功能特性 :像KDE这样的桌面环境通常比单纯的窗口管理…

作者头像 李华
网站建设 2026/3/12 23:59:01

34、FreeBSD 多媒体与 Web 服务器使用指南

FreeBSD 多媒体与 Web 服务器使用指南 1. FreeBSD 多媒体功能 1.1 CD 播放器 KDE 自带了一个 CD 播放器,该播放器支持 CDDB 系统,这意味着它可以自动从互联网下载专辑和曲目信息。 1.2 混音器 FreeBSD 提供了一个可以通过命令行访问的混音器。 - 显示当前混音器设置 …

作者头像 李华
网站建设 2026/3/12 8:04:22

鸿蒙三方库—harmony-utils使用

简介 harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库&#xff0c;借助众多实用工具类&#xff0c;致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志…

作者头像 李华