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) {
}
说明:
- 用于心跳检测
- 较少在业务中直接使用

浙公网安备 33010602011771号