SpringBoot如何通过WebSocket实现后端向客户端主动发送消息机制?

2026-05-26 01:161阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计603个文字,预计阅读时间需要3分钟。

SpringBoot如何通过WebSocket实现后端向客户端主动发送消息机制?

目录

一、引入WebSocket依赖

二、WebSocket配置

三、WebSocket服务

四、消息推送

一、引入WebSocket依赖

xml org.springframework.boot spring-boot-starter-websocket

目录
  • 一、引入websocket依赖
  • 二、WebSocket配置
  • 三、WebSocket服务
  • 四、消息推送

一、引入websocket依赖

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

二、WebSocket配置

@Configuration public class WebSocketConfig {     @Bean     public ServerEndpointExporter serverEndpointExporter() {         return new ServerEndpointExporter();     } }

三、WebSocket服务

(前端连接地址ws://ip:端口/websocket,请自行替换ip、端口和接口名称)

@ServerEndpoint(value = "/websocket") @Component public class WebSocketServer {     private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class);       //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。     private static int onlineCount = 0;     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。     private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();       //与某个客户端的连接会话,需要通过它来给客户端发送数据     private Session session;       /**      * 连接建立成功调用的方法      */     @OnOpen     public void onOpen(Session session) {         this.session = session;         //加入set中         webSocketSet.add(this);         //在线数加1         addOnlineCount();         log.info("有新连接加入!当前在线人数为" + getOnlineCount());         try {             sendMessage("连接成功");         } catch (IOException e) {             log.error("websocket IO异常");         }     }       /**      * 连接关闭调用的方法      */     @OnClose     public void onClose() {         //从set中删除         webSocketSet.remove(this);         //在线数减1         subOnlineCount();         log.info("有一连接关闭!当前在线人数为" + getOnlineCount());     }       /**      * 收到客户端消息后调用的方法      *      * @param message 客户端发送过来的消息      */     @OnMessage     public void onMessage(String message, Session session) {         log.info("来自客户端的消息:" + message);           //群发消息         for (WebSocketServer item : webSocketSet) {             try {                 item.sendMessage(message);             } catch (IOException e) {                 e.printStackTrace();             }         }     }       /**      * @param session      * @param error      */     @OnError     public void onError(Session session, Throwable error) {         log.error("发生错误");         error.printStackTrace();     }       public void sendMessage(String message) throws IOException {         this.session.getBasicRemote().sendText(message);     }       /**      * 群发自定义消息      */     public static void sendInfo(String message) throws IOException {         log.info(message);         for (WebSocketServer item : webSocketSet) {             try {                 item.sendMessage(message);             } catch (IOException e) {                 continue;             }         }     }       public static synchronized int getOnlineCount() {         return onlineCount;     }       public static synchronized void addOnlineCount() {         WebSocketServer.onlineCount++;     }       public static synchronized void subOnlineCount() {         WebSocketServer.onlineCount--;     } }

四、消息推送

后端调用WebServer的sendInfo接口(例如:WebSocketServer.sendInfo("Hello World");)实现主动向前端推送消息

SpringBoot如何通过WebSocket实现后端向客户端主动发送消息机制?

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

本文共计603个文字,预计阅读时间需要3分钟。

SpringBoot如何通过WebSocket实现后端向客户端主动发送消息机制?

目录

一、引入WebSocket依赖

二、WebSocket配置

三、WebSocket服务

四、消息推送

一、引入WebSocket依赖

xml org.springframework.boot spring-boot-starter-websocket

目录
  • 一、引入websocket依赖
  • 二、WebSocket配置
  • 三、WebSocket服务
  • 四、消息推送

一、引入websocket依赖

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

二、WebSocket配置

@Configuration public class WebSocketConfig {     @Bean     public ServerEndpointExporter serverEndpointExporter() {         return new ServerEndpointExporter();     } }

三、WebSocket服务

(前端连接地址ws://ip:端口/websocket,请自行替换ip、端口和接口名称)

@ServerEndpoint(value = "/websocket") @Component public class WebSocketServer {     private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class);       //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。     private static int onlineCount = 0;     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。     private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();       //与某个客户端的连接会话,需要通过它来给客户端发送数据     private Session session;       /**      * 连接建立成功调用的方法      */     @OnOpen     public void onOpen(Session session) {         this.session = session;         //加入set中         webSocketSet.add(this);         //在线数加1         addOnlineCount();         log.info("有新连接加入!当前在线人数为" + getOnlineCount());         try {             sendMessage("连接成功");         } catch (IOException e) {             log.error("websocket IO异常");         }     }       /**      * 连接关闭调用的方法      */     @OnClose     public void onClose() {         //从set中删除         webSocketSet.remove(this);         //在线数减1         subOnlineCount();         log.info("有一连接关闭!当前在线人数为" + getOnlineCount());     }       /**      * 收到客户端消息后调用的方法      *      * @param message 客户端发送过来的消息      */     @OnMessage     public void onMessage(String message, Session session) {         log.info("来自客户端的消息:" + message);           //群发消息         for (WebSocketServer item : webSocketSet) {             try {                 item.sendMessage(message);             } catch (IOException e) {                 e.printStackTrace();             }         }     }       /**      * @param session      * @param error      */     @OnError     public void onError(Session session, Throwable error) {         log.error("发生错误");         error.printStackTrace();     }       public void sendMessage(String message) throws IOException {         this.session.getBasicRemote().sendText(message);     }       /**      * 群发自定义消息      */     public static void sendInfo(String message) throws IOException {         log.info(message);         for (WebSocketServer item : webSocketSet) {             try {                 item.sendMessage(message);             } catch (IOException e) {                 continue;             }         }     }       public static synchronized int getOnlineCount() {         return onlineCount;     }       public static synchronized void addOnlineCount() {         WebSocketServer.onlineCount++;     }       public static synchronized void subOnlineCount() {         WebSocketServer.onlineCount--;     } }

四、消息推送

后端调用WebServer的sendInfo接口(例如:WebSocketServer.sendInfo("Hello World");)实现主动向前端推送消息

SpringBoot如何通过WebSocket实现后端向客户端主动发送消息机制?

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。