【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标

如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。

XML 复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2. 创建WebSocketServer服务类

【豆包】

@ServerEndpoint注解

  1. 声明服务器端点 :通过在类上添加 @ServerEndpoint 注解,该类就成为了一个 WebSocket 服务器端点,可以接收客户端的连接。
  2. 指定访问路径 :注解的 value 属性用于指定客户端连接的 URI 路径,例如 @ServerEndpoint("/ws") 表示客户端可以通过 ws://服务器地址/ws 连接到该端点。
  3. 和@PathParam注解配合使用

@PathParam注解

  • 动态路径匹配 :通过在 @ServerEndpoint 的路径中定义参数占位符(如 /{username}),可以捕获客户端连接 URI 中的实际值。
  • 参数注入 :将捕获的路径参数值注入到 @OnOpen@OnMessage@OnClose 注解方法的参数中。
  • 类型转换 :自动将路径参数从字符串转换为基本数据类型(如 intlongboolean 等)。

@OnOpen注解

  • 连接初始化 :在客户端与服务器成功建立 WebSocket 连接后,被 @OnOpen 注解标记的方法会立即执行。
  • 参数注入 :方法可以接收特定参数,如 Session 对象、连接参数等。

@OnMessage

  • 自动解码 :配合 Decoder 使用时,可以自动将消息转换为自定义对象。
  • 异步响应:支持同步或异步发送响应。

@OnClose

  • 资源释放:清理连接相关的资源(如会话数据、数据库连接)。
  • 通知其他客户端:广播用户离开的消息。
  • 获取关闭状态 :通过 CloseReason 参数了解关闭原因。
java 复制代码
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {

    //存放会话对象
    private static Map<String, Session> sessionMap = new HashMap();

    //连接建立成功调用的方法
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
        System.out.println("客户端:" + sid + "建立连接");
        sessionMap.put(sid, session);
    }

    //收到客户端消息后调用的方法
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
        System.out.println("收到来自客户端:" + sid + "的信息:" + message);
    }

    //连接关闭调用的方法
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
        System.out.println("连接断开:" + sid);
        sessionMap.remove(sid);
    }

    //主动发送消息 (群发消息)
    public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服务器向客户端发送消息
                session.getBasicRemote().sendText(message);
                System.out.println("发送websocket");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

3. 将WebSocket配置成bean

java 复制代码
@Configuration
public class WebSocketConfiguration {

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

}
相关推荐
递归尽头是星辰8 小时前
Spring Boot 配置排除失效深度解析:时序与机制核心
spring boot·自动配置·bean 加载·exclude失效·组件扫描
小锋java12349 小时前
SpringBoot 4 + Spring Security 7 + Vue3 前后端分离项目设计最佳实践
java·vue.js·spring boot
一 乐9 小时前
校园线上招聘|基于springboot + vue校园线上招聘系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园线上招聘系统
不懂的浪漫10 小时前
mqtt-plus 架构解析(四):MqttMessageInterceptor 的扩展点设计
java·spring boot·物联网·mqtt
宠友信息10 小时前
一套基于uniapp+springboot完整社区系统是如何实现的?友猫社区源码级功能解析
java·spring boot·后端·微服务·微信·uni-app
阿丰资源12 小时前
SpringBoot+MySQL+MyBatis-Plus+Vue前后端分离仓库管理系统 (附资料)
spring boot·mysql·mybatis
小信丶12 小时前
Spring Cloud Stream EnableBinding注解详解:定义、应用场景与示例代码
java·spring boot·后端·spring
s1mple“”12 小时前
互联网大厂Java面试实录:谢飞机的AIGC求职之旅 - JVM并发编程到Spring Cloud微服务
spring boot·aigc·微服务架构·java面试·分布式系统·rag技术·redis数据库
ffqws_12 小时前
Spring Boot入门:通过简单的注册功能串联Controller,Service,Mapper。(含有数据库建立,连接,及一些关键注解的讲解)
数据库·spring boot·后端
汤愈韬12 小时前
网络安全之网络基础知识_2
网络协议·安全·web安全