尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

WebSocket使用教程 整合springboot

WebSocket使用教程 整合springboot
📅 发布时间:2026/6/19 15:38:36

1.pom文件引入

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

2.编写websocket 的配置类 这个配置完成相当于服务webstock

已经配好了

@Configuration
@EnableWebSocket  //注解需要写
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {//设置访问路径 ws://locahost/webStock/任意字符  这里是自定义的,/webstock/con 也行registry.addHandler(zdyWebSocketHandler, "/webStock/**").setAllowedOrigins("*");}
}

  

 3.继承 TextWebSocketHandler 类实现具体业务

 

public class ZdyWebSocketHandler extends TextWebSocketHandler {private static CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();/*** 当WebSocket连接建立后调用* * @param session 建立连接的WebSocket会话* @throws Exception 抛出的异常*/@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {String requestedPath = session.getUri().getPath();System.out.println("WebSocket 连接已建立 established: " + session.getId());sessions.add(session);session.sendMessage(new TextMessage("WebSocket 连接已建立"));}/*** 处理接收到的文本消息* * @param session 发送消息的WebSocket会话* @param message 接收到的文本消息* @throws Exception 抛出的异常*/@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {String payload = message.getPayload();System.out.println("Received message: " + payload);// Echo the message backsession.sendMessage(new TextMessage("Echo: " + payload));}/*** 当WebSocket连接关闭后调用* * @param session 关闭连接的WebSocket会话* @param status 连接关闭的状态信息* @throws Exception 抛出的异常*/@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {sessions.remove(session);System.out.println("WebSocket 已关闭: " + session.getId() + ", status: " + status);}/*** 处理WebSocket传输过程中发生的错误* * @param session 发生错误的WebSocket会话* @param exception 抛出的异常对象* @throws Exception 抛出的异常*/@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {System.err.println("WebSocket transport error: " + exception.getMessage());if (session.isOpen()) {session.close();}sessions.remove(session);}/*** 广播消息给所有连接的客户端* * @param message 要广播的消息内容*/public static void broadcastMessage(String message) {sessions.forEach(session -> {try {if (session.isOpen()) {session.sendMessage(new TextMessage(message));}} catch (IOException e) {System.err.println("Error broadcasting message: " + e.getMessage());}});}}

4.进阶使用,要在 TextWebSocketHandler 类 使用其它服务接口,需要添加构造函数

  

public class WebSocketConfig implements WebSocketConfigurer {private final  ZdyWebSocketHandler zdyWebSocketHandler;//添加构造函数public WebSocketConfig (ZdyWebSocketHandler xbimWebSocketHandler) {this.zdyWebSocketHandler = zdyWebSocketHandler;}@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(xbimWebSocketHandler, "/webStock/**") .setAllowedOrigins("*"); } 
}
public class ZdyWebSocketHandler extends TextWebSocketHandler {private static CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();private final ZdyPushInfoService zdyPushInfoService;//其它的服务 添加这个就可以调用public ZdyWebSocketHandler(ZdyPushInfoService ZdyPushInfoService) {this.zdyPushInfoService =  zdyPushInfoService;}/*** 当WebSocket连接建立后调用* * @param session 建立连接的WebSocket会话* @throws Exception 抛出的异常*/@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {String requestedPath = session.getUri().getPath();System.out.println("WebSocket 连接已建立 established: " + session.getId());sessions.add(session);session.sendMessage(new TextMessage("WebSocket 连接已建立"));}/*** 处理接收到的文本消息* * @param session 发送消息的WebSocket会话* @param message 接收到的文本消息* @throws Exception 抛出的异常*/@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {String payload = message.getPayload();System.out.println("Received message: " + payload);// Echo the message backsession.sendMessage(new TextMessage("Echo: " + payload));}/*** 当WebSocket连接关闭后调用* * @param session 关闭连接的WebSocket会话* @param status 连接关闭的状态信息* @throws Exception 抛出的异常*/@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {sessions.remove(session);System.out.println("WebSocket 已关闭: " + session.getId() + ", status: " + status);}/*** 处理WebSocket传输过程中发生的错误* * @param session 发生错误的WebSocket会话* @param exception 抛出的异常对象* @throws Exception 抛出的异常*/@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {System.err.println("WebSocket transport error: " + exception.getMessage());if (session.isOpen()) {session.close();}sessions.remove(session);}/*** 广播消息给所有连接的客户端* * @param message 要广播的消息内容*/public static void broadcastMessage(String message) {sessions.forEach(session -> {try {if (session.isOpen()) {session.sendMessage(new TextMessage(message));}} catch (IOException e) {System.err.println("Error broadcasting message: " + e.getMessage());}});}}

5.安全验证相关

  /*** 当WebSocket连接建立后调用* * @param session 建立连接的WebSocket会话* @throws Exception 抛出的异常*/@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {String requestedPath = session.getUri().getPath();
//服务连接进来自己验证是否可以连接
}

6.使用了nginx 后需要配置对应的 ws  服务端口,http 和https 是不一样的  

  

server {
listen80;server_name  域名;proxy_http_version  1.1;……#启用支持websocket连接的配置proxy_set_header    Upgrade             $http_upgrade;proxy_set_header    Connection          "upgrade";location / {proxy_redirect off;proxy_pass http://myweb_backend;proxy_connect_timeout 60;proxy_read_timeout 600;proxy_send_timeout 600;}}

重要的是这两行,它表明是websocket连接进入的时候,进行一个连接升级将http连接变成websocket的连接。  

启用支持websocket连接:

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy read timeout 表明连接成功以后等待服务器响应的时候,如果不配置默认为60s;

proxy_http_version 1.1;表明使用http版本为1.1

  


相关新闻

  • 【C++】哈希表 - 详解
  • 论文大纲模版怎么用?看完这篇全明白!
  • 屏幕信息网站

最新新闻

  • Kali Linux安装配置Burp Suite专业版完整指南
  • 2026年6月最新江诗丹顿中国官方售后服务电话地址热线及客服网点 - 江诗丹顿服务中心
  • 2026 年 6 月最新腕表干货!万国全大陆官方正规维修门店地址完整公示,全国统一售后热线同步全新上线 - 万国中国服务中心
  • 天津名包回收机构实地测评:5家店报价服务全方位对比,看完再卖! - 讯息早知道
  • 2026年6月最新劳力士中国官方售后热线服务电话客户地址网点 - 劳力士服务中心
  • 2026年大平层装修深度测评:如何为你的改善型住宅匹配最佳方案? - 速递信息

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号