SpringBoot如何集成WebSocket

在Spring Boot中集成WebSocket有多种方式,以下是三种常见的集成方式及其配置步骤:

一、使用Javax.websocket原生注解

  1. 添加依赖

    pom.xml文件中添加Spring Boot WebSocket的依赖:

    xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
  2. 配置服务端点

    使用@ServerEndpoint注解来标记WebSocket服务端点,并配置路径。在类中添加处理连接打开、关闭、接收消息和异常的方法,分别使用@OnOpen@OnClose@OnMessage@OnError注解来标记。

    java 复制代码
    @Component
    @ServerEndpoint("/websocket/{type}")
    public class JavaxWebSocketServerEndpoint {
    
        @OnOpen
        public void onOpen(Session session, EndpointConfig config, @PathParam("type") String type) {
            // 连接建立
        }
    
        @OnClose
        public void onClose(Session session, CloseReason reason) {
            // 连接关闭
        }
    
        @OnMessage
        public void onMessage(Session session, String message) {
            // 接收文本信息
        }
    
        @OnMessage
        public void onMessage(Session session, PongMessage message) {
            // 接收pong信息
        }
    
        @OnMessage
        public void onMessage(Session session, ByteBuffer message) {
            // 接收二进制信息
        }
    
        @OnError
        public void onError(Session session, Throwable e) {
            // 异常处理
        }
    }
  3. 配置Spring Boot以支持Javax.websocket

    创建一个配置类,并手动注入ServerEndpointExporter,以便Spring Boot能够扫描到WebSocket的注解。

    java 复制代码
    @Configuration(proxyBeanMethods = false)
    public class JavaxWebSocketConfiguration {
    
        @Bean
        public ServerEndpointExporter serverEndpointExporter() {
            return new ServerEndpointExporter();
        }
    }

二、使用Spring封装的WebSocket

  1. 添加依赖

    同样在pom.xml文件中添加Spring Boot WebSocket的依赖。

  2. 配置WebSocket处理器

    实现WebSocketHandler接口,并在配置类中注册该处理器。,并在配置类中注册该处理器。

    java 复制代码
    @Component
    public class MyWebSocketHandler implements WebSocketHandler {
    
        @Override
        public void handleTextMessage(WebSocketSession session, TextMessage {
    
        @Override
        public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            // 处理文本消息
            String payload = message.getPayload();
            session.sendMessage(new TextMessage("服务器收到:" + payload));
        }
        // 其他方法如afterConnectionEstablished, afterConnectionClosed, handleTransportError等也需要实现
    }
    
    
    
    @EnableWebSocket
    @Configuration
    public class WebSocketConfig implements WebSocketConfigurer {
        @Autowired
        private MyWebSocketHandler webSocketHandler;
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(webSocketHandler, "/testWs").setAllowedOrigins("*");
        }
    }

三、使用Spring封装的STOMP协议

STOMP(Simple Text Oriented Messaging Protocol)是一个简单的文本协议,用于在客户端和服务器之间进行消息传递。虽然它提供了更多的功能,但相对来说也更加复杂。

  1. 添加依赖

    除了Spring Boot WebSocket的依赖外,还需要添加Spring Messaging的依赖。

  2. 配置STOMP端点和消息代理

    在配置类中配置STOMP端点和消息代理,如RabbitMQ或ActiveMQ等。

  3. 实现消息处理器

    使用@MessageMapping注解来标记处理客户端发送消息的方法。

  4. 客户端配置

    客户端需要使用STOMP协议的客户端库来连接服务器,并发送和接收消息。

总结

以上三种方式都可以在Spring Boot中集成WebSocket,选择哪种方式取决于具体的需求和项目的复杂度。对于简单的WebSocket应用,使用Javax.websocket原生注解或Spring封装的WebSocket已经足够;而对于需要更复杂消息传递和路由的应用,可以考虑使用Spring封装的STOMP协议。

相关推荐
IT_陈寒1 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱1 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
Wang's Blog1 小时前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
Conan在掘金2 小时前
鸿蒙报错速查:struct 里嵌 namespace 声明就炸,根因 + 真解法
后端
东方小月2 小时前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
卫子miao2 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
神奇小汤圆2 小时前
为什么 AQS 成为 Java 并发的基石?
后端
星栈3 小时前
MCP 从 stdio 迁到 SSE,踩了 5 个传输层坑
人工智能·后端·架构
Conan在掘金3 小时前
鸿蒙报错速查:struct 里嵌 enum 声明就炸,根因 + 真解法
后端
paopaokaka_luck4 小时前
基于Springboot3+Vue3的高校选课系统(AI选课助手、协同过滤算法、分享到微博、扣扣、Echarts图形化分析)
网络·spring boot·网络协议·echarts