0


Spring Boot 中实现 WebSocket 服务并让客户端实时接收消息

在 Spring Boot 中实现 WebSocket 服务并让客户端实时接收消息,可以使用 Spring Boot 内置的 WebSocket 支持。下面我为你提供一个基于 Spring Boot 和 WebSocket 的完整 Demo。

1. 引入依赖

首先,在

pom.xml

中添加 WebSocket 的依赖:

<dependencies><!-- WebSocket 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies>

2. WebSocket 配置

创建一个配置类

WebSocketConfig.java

,用于配置 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(WebSocketHandlerRegistry registry){// 注册 WebSocket 处理器和端点
        registry.addHandler(newWebSocketHandler(),"/websocket").setAllowedOrigins("*");// 允许跨域}}

3. WebSocket 处理器

创建

WebSocketHandler.java

,处理 WebSocket 的连接、消息接收、消息广播等操作。

importorg.springframework.web.socket.CloseStatus;importorg.springframework.web.socket.TextMessage;importorg.springframework.web.socket.WebSocketSession;importorg.springframework.web.socket.handler.TextWebSocketHandler;importjava.util.HashSet;importjava.util.Set;publicclassWebSocketHandlerextendsTextWebSocketHandler{// 用于保存所有连接的 WebSocket 会话privatestaticfinalSet<WebSocketSession> sessions =newHashSet<>();// 当有客户端连接时调用@OverridepublicvoidafterConnectionEstablished(WebSocketSession session)throwsException{
        sessions.add(session);
        session.sendMessage(newTextMessage("欢迎连接 WebSocket 服务器!"));}// 当有消息从客户端发送过来时调用@OverrideprotectedvoidhandleTextMessage(WebSocketSession session,TextMessage message)throwsException{System.out.println("收到客户端消息: "+ message.getPayload());}// 当连接关闭时调用@OverridepublicvoidafterConnectionClosed(WebSocketSession session,CloseStatus status)throwsException{
        sessions.remove(session);}// 广播消息给所有连接的客户端publicstaticvoidbroadcast(String message)throwsException{for(WebSocketSession session : sessions){if(session.isOpen()){
                session.sendMessage(newTextMessage(message));}}}}

4. 模拟公告推送

创建一个控制器

AnnouncementController.java

,模拟公告的发布功能。发布公告时,会调用 WebSocket 处理器的

broadcast

方法,将消息推送给所有已连接的客户端。

importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassAnnouncementController{@GetMapping("/announce")publicStringsendAnnouncement(){try{// 模拟公告内容String announcement ="新公告发布于: "+System.currentTimeMillis();WebSocketHandler.broadcast(announcement);return"公告已发布: "+ announcement;}catch(Exception e){
            e.printStackTrace();return"发布失败";}}}

5. 运行步骤

1. 启动 Spring Boot 应用

启动 Spring Boot 项目后,WebSocket 服务器将会在

/websocket

端点上监听。

2. 小程序或网页客户端

客户端可以是小程序或者网页。这里提供一个简单的 HTML 客户端来测试 WebSocket 连接。

HTML 客户端代码(用于测试 WebSocket 连接)

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>WebSocket Demo</title></head><body><h1>WebSocket Demo</h1><divid="messages"></div><script>// 连接 WebSocket 服务器var socket =newWebSocket("ws://localhost:8080/websocket");

        socket.onopen=function(){
            console.log("连接成功!");};

        socket.onmessage=function(event){
            console.log("收到消息:", event.data);
            document.getElementById("messages").innerHTML +="<p>"+ event.data +"</p>";};

        socket.onclose=function(){
            console.log("连接关闭!");};</script></body></html>
3. 发布公告

使用浏览器访问

http://localhost:8080/announce

,每次访问该地址时,服务器会推送一条公告消息给所有连接的 WebSocket 客户端。

6. 小程序端实现

你也可以在微信小程序中使用类似的方式,通过 WebSocket 接收服务器推送的公告。

Page({
  data:{
    messages:[]// 保存接收到的公告消息},onLoad:function(){// 连接 WebSocket 服务器
    wx.connectSocket({
      url:'ws://localhost:8080/websocket',// 注意修改为你的服务器地址success:(res)=>{
        console.log('WebSocket 连接成功!');},fail:(err)=>{
        console.error('WebSocket 连接失败', err);}});// 监听 WebSocket 消息
    wx.onSocketMessage((res)=>{
      console.log('收到服务器消息:', res.data);this.setData({
        messages:[...this.data.messages, res.data]// 将新消息添加到列表中});});// 监听 WebSocket 连接关闭
    wx.onSocketClose((res)=>{
      console.log('WebSocket 已关闭', res);});}});

7. 总结

  • 通过 Spring Boot 的 WebSocket 支持,可以在服务器端推送实时公告。
  • 客户端可以是 HTML 页面,也可以是微信小程序,使用 WebSocket 接口接收公告消息。
  • 在这里插入图片描述

本文转载自: https://blog.csdn.net/m0_74825409/article/details/142641053
版权归原作者 m0_74825409 所有, 如有侵权,请联系我们删除。

“Spring Boot 中实现 WebSocket 服务并让客户端实时接收消息”的评论:

还没有评论