Spring WebSocket
@EnableWebSocket、WebSocketHandler。
40 分钟
Spring WebSocket
Spring Boot 通过 spring-boot-starter-websocket 暴露 WebSocket 端点。实验台底层先用原生 Handler,再上 STOMP 抽象(ws-stomp)。
学习目标
- 启用
@EnableWebSocket并注册 Handler - 实现
WebSocketHandler收发文本消息 - 理解与 sb-mvc 共存的路由
依赖与配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(labChatHandler(), "/ws/lab")
.setAllowedOrigins("https://coderoadmap.local");
}
@Bean
LabChatHandler labChatHandler() {
return new LabChatHandler();
}
}
Handler 示例
public class LabChatHandler extends TextWebSocketHandler {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message)
throws IOException {
String payload = message.getPayload();
session.sendMessage(new TextMessage("echo:" + payload));
}
}
TextWebSocketHandler 适合 JSON 字符串;二进制用 BinaryWebSocketHandler。
与 REST 分工
| 路径 | 协议 | 职责 |
|---|---|---|
/api/lab/sessions | REST | 创建实验、持久化记录 |
/ws/lab | WebSocket | 实时消息广播 |
业务数据仍落 MySQL(sb-jdbc);WS 只负责 在线态 推送。
练习
- 注册
/ws/echo,浏览器连上发"hi"看回显 - 在 Handler 里打印
session.getId()与 remoteAddress - 对比 STOMP 版为何更易扩展(预习 )