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协议。

相关推荐
Jodie同志2 分钟前
第1~15天:原生Agent、RAG与LangGraph基础(完整代码实操)
前端·后端·agent
Zane199412 分钟前
单例线程安全、生产者消费者、死锁:并发面试三连问串讲
java·后端
用户693717500138413 分钟前
#DeepSeek+Pi‑Agent 王炸组合跑赢 Claude‑Code!
前端·人工智能·后端
Zane199418 分钟前
类变量与实例变量:一个共享列表引发的线上事故
后端·python
Scene21636 分钟前
AgentScope 2.0:2. 快速上手 从零构建生产级智能体
后端
前端一课42 分钟前
用 TRAE Work 把项目踩坑经验沉淀成「团队可复用工程规范」,新人再也不重复掉坑
前端·后端
神奇小汤圆1 小时前
一文吃透 Spring 框架:原理、实践与面试全解析
后端
站大爷IP1 小时前
Python 的切片把我坑惨了,原来 `[:]` 是浅拷贝,而 `copy.deepcopy` 才是我的救命稻草
后端
神奇小汤圆1 小时前
Java 万字长文:从零基础到高级应用的完整教程——把面向对象讲透
后端
孓最求完美1 小时前
实战经验:JT808/JT809 车联网高并发服务端性能优化指南
后端