SpringBoot实现WebSocket服务端
WebSocket 可以让你实现 实时通信,比普通 HTTP 接口更炫也更“活”。今天讲一个 Spring Boot + Java 的实现思路 。
1️⃣ 添加依赖
Maven:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2️⃣ 创建 WebSocket 配置
Java 版本:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {private final MyWebSocketHandler handler;public WebSocketConfig(MyWebSocketHandler handler) {this.handler = handler;}@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(handler, "/ws").setAllowedOrigins("*");}
}
/ws
就是前端连接的 WebSocket 地址setAllowedOrigins("*")
可以解决跨域问题(开发阶段)
3️⃣ 创建 WebSocket 处理器
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.Collections;
import java.util.HashSet;
import java.util.Set;@Component
public class MyWebSocketHandler extends TextWebSocketHandler {private final Set<WebSocketSession> sessions = Collections.synchronizedSet(new HashSet<>());@Overridepublic void afterConnectionEstablished(WebSocketSession session) {sessions.add(session);System.out.println("新连接: " + session.getId());}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息: " + message.getPayload());// 广播给所有连接synchronized (sessions) {for (WebSocketSession s : sessions) {if (s.isOpen()) {s.sendMessage(new TextMessage("收到消息: " + message.getPayload()));}}}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) {sessions.remove(session);System.out.println("连接关闭: " + session.getId());}
}
4️⃣ postman测试
ws://localhost:8081/ws