添加依赖
在项目的pom.xml
文件中添加WebSocket依赖。若依框架默认可能未包含WebSocket支持,需手动引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
配置WebSocket
创建配置类启用WebSocket支持,并注册WebSocket处理器:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler(), "/ws")
.setAllowedOrigins("*");
}
@Bean
public WebSocketHandler myWebSocketHandler() {
return new MyWebSocketHandler();
}
}
实现WebSocket处理器
自定义处理器继承TextWebSocketHandler
,处理连接、消息和关闭事件:
public class MyWebSocketHandler extends TextWebSocketHandler {
private static final Set<WebSocketSession> sessions = new CopyOnWriteArraySet<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) {
sessions.add(session);
System.out.println("New connection: " + session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
System.out.println("Received message: " + message.getPayload());
for (WebSocketSession s : sessions) {
try {
s.sendMessage(new TextMessage("Echo: " + message.getPayload()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
sessions.remove(session);
System.out.println("Connection closed: " + session.getId());
}
}
前端连接WebSocket
在Vue或HTML页面中建立WebSocket连接:
const socket = new WebSocket('ws://localhost:8080/ws');
socket.onopen = function() {
console.log('WebSocket connected');
socket.send('Hello Server');
};
socket.onmessage = function(event) {
console.log('Message from server: ', event.data);
};
若依集成注意事项
- 权限控制:若需结合若依的权限系统,可在WebSocket握手时验证Token,例如通过
HandshakeInterceptor
。 - 消息广播:结合Redis发布订阅功能实现集群环境下的消息广播。
- 心跳检测:客户端需定期发送心跳包,避免连接被意外关闭。
示例:握手拦截器
添加权限验证拦截器:
public class AuthHandshakeInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) {
String token = ((ServletServerHttpRequest) request).getServletRequest().getParameter("token");
// 验证Token逻辑
return true; // 验证通过返回true
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception exception) {}
}
在配置类中注册拦截器:
registry.addHandler(myWebSocketHandler(), "/ws")
.addInterceptors(new AuthHandshakeInterceptor())
.setAllowedOrigins("*");
通过以上步骤,即可在若依框架中实现基础的WebSocket通信功能。