SpringBoot进阶操作

SpringBoot使用WebSocket

1.引入依赖

这里用的是gradle,Maven依赖的话自己搜一下,大差不差

implementation("org.springframework.boot:spring-boot-starter-websocket")

2.创建websocket配置类

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

ServerEndpointExporter 的作用是“在 Spring 启动时,自动扫描并注册@ServerEndpoint 类”。
如果不加这个配置,前端就连不上websocket,报404

3.写后端websocket代码

@ServerEndpoint(value = "/api/websocket/{userId}")  
@Controller  
public class WebSocketController {  
    private String userId;  
  
    /**  
     * 连接建立成功调用的方法  
     */  
    @OnOpen  
    public void onOpen(Session session, @PathParam("userId") String userId){  
        this.userId = userId;  
        System.out.println("用户:"+userId+"连接成功!");  
    }  
  
    /**  
     * 连接关闭时自动调用的方法  
     */  
    @OnClose  
    public void onClose(){  
        System.out.println("连接已关闭");  
    }  
    /**  
     * 收到客户端主动发送消息时调用的方法  
     */  
    @OnMessage  
    public void onMessage(String message, Session session){  
  
        try {  
            System.out.println("用户:"+userId+"发送了消息:"+message);  
            //给客户端发消息  
            session.getBasicRemote().sendText("用户:"+userId+",已收到消息:"+message);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}
  • Session session 代表 一次 WebSocket 连接的上下文对象,用它来 给客户端发消息、获取连接信息、管理连接状态

Session类型参数的作用

1.给当前客户端发消息

session.getBasicRemote().sendText("消息内容");

2.判断连接是否还存活

session.isOpen();

3.获取连接唯一标识

session.getId();

4.存储连接级数据(类似 request scope)

session.getUserProperties().put("key", value);

5.主动关闭连接

session.close();

Session 就是 WebSocket 里的“连接句柄”

@PathParam("userId")注解的作用

从 WebSocket URL 路径中 提取参数值,并注入到方法参数中。

合法参数组合

WebSocket 容器会做 方法签名匹配

1.文本消息

@OnMessage
public void onMessage(String message) {
}

说明:

  • message 接收客户端发送的文本内容
  • 最基础、最常用

2.接收消息内容 + Session

@OnMessage
public void onMessage(String message, Session session) {
}

说明:

  • String message:文本消息内容
  • Session session:当前 WebSocket 连接会话

3.二进制消息(Binary Message)合法参数组合

@OnMessage
public void onMessage(byte[] data) {
}

说明:

  • 接收客户端发送的二进制数据
  • 常用于文件、图片、音频等

4.使用 ByteBuffer 接收 + Session

@OnMessage
public void onMessage(ByteBuffer buffer, Session session) {
}

说明:

  • ByteBuffer 性能更好
  • 适合大数据或流式处理

5.系统控制消息(Pong)接收 Pong 消息

@OnMessage
public void onMessage(PongMessage pongMessage) {
}

说明:

  • 用于心跳检测
  • 较少在业务中直接使用
posted @ 2026-07-02 17:42  畅畅c  阅读(2)  评论(0)    收藏  举报