开发者

SpringBoot实现WebSocket服务并让客户端实时接收

目录
  • 1. 引入依赖
  • 2. WebSocket 配置
  • 3. WebSocket 处理器
  • 4. 模拟公告推送
  • 5. 运行步骤
    • 1. 启动 Spring Boot 应用
    • 2. 小程序或网页客户端
    • 3. 发布公告
  • 6. 小程序端实现
    • 7. 总结

      在 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 的端点和处理逻辑。

      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.socket.config.annotation.EnableWebSocket;
      import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
      import org.springframework.jsweb.socket.config.annotation.WebSocketHandlerRegistry;
      
      @Configuration
      @EnableWebSocket
      public class WebSocketConfig implements WebSocketConfigurer {
      
          @Override
          public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
              // 注册 WebSocket 处理器和端点
              registry.addHandler(new WebSocketHandler(), "/websocket")
                      .setAllowedOrigins("*");  // 允许跨域
          }
      }
      

      3. WebSocket 处理器

      创建 WebSocketHandler.java,处理 WebSocket 的连接、消息接收、消息广播等操作。

      import org.springframework.web.socket.CloseStatus;
      import org.springframework.web.socket.TextMessage;
      imjavascriptport org.springframework.web.socket.WebSocketSession;
      import org.springframework.web.socket.handler.TextWebSocketHandler;
      
      import java.util.HashSet;
      import java.util.Set;
      
      public class WebSocketHandler extends TextWebSocketHandler {
      
          // 用于保存所有连接的 WebSocket 会话
          private static final Set<WebSocketSession> sessions = new HashSet<>();
      
          // 当有客户端连接时调用
          @Override
          public void afterConnectionEstablished(WebSocketSession session) throws Exception {
              sessions.add(session);
              session.sendMessage(new TextMessage("欢迎连接 WebSocket 服务器!"));
          }
      
          // 当有消息从客户端发送过来时调用
          @Override
          protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
              System.out.println("收到客户端消息: " + message.getPayload());
          }
      
          // 当连接关闭时调用
          @Override
          public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
              sessions.remove(session);
          }
      
          // 广播消息给所有连接的客户端
          public static void broadcast(String message) throws Exception {
              for (WebSocketSession session : sessions) {
                  if (session.isOpen()) {
                      session.sendMessage(new TextMessage(message));
                  }
              }
          }
      }
      

      4. 模拟公告推送

      创建一个控制器 AnnouncementController.java,模拟公告的发布功能。发布公告时,会调用 WebSocket 处理器的 broadcast 方法,将消息推送给所有已连接的客户端。

      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      public class AnnouncementController {
      
          @GetMapping("/announce")
          public String sendAnnouncement() {
              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 连接)

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>WebSocket Demo</title>
      </hea编程d>
      <body>
          <h1>WebSocket Demo</h1>
          <div id="messages"></div>
          <script>
              // 连接 WebSocket 服务器
              var socket = new WebSocket("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() {
      php            console.log("连接关闭!");
              };
          </script>
      </body>
      </html>
      

      3. 发布公告

      使用浏览器访问 http://localhost:8080/announce,每次访问该地址时,服务器会推送一条公告消息给所有连接的 WebSocket 客户端android

      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 接口接收公告消息。

      到此这篇关于SpringBoot实现WebSocket服务并让客户端实时接收的文章就介绍到这了,更多相关SpringBoot WebSocket实时接收内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜