#pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
#配置類
@Configuration public class WebSocketConfig { /** * 首先在該類中注入一個ServerEndpointExporter的bean, * ServerEndpointExporter這個bean會自動注冊使用了@ServerEndpoint這個注解的websocket endpoint */ @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
#服務端
@Slf4j @Component @ServerEndpoint("/") public class MyWebSocketServer { /** * 靜態變量,用來記錄當前連接數 */ private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(); /** * concurrent線程安全set,用來存放每個客戶端對應的MyWebSocketServer對象 */ public static final CopyOnWriteArraySet<MyWebSocketServer> WEBSOCKETS = new CopyOnWriteArraySet<>(); /** * 與每個客戶端的連接會話,需要通過它來給客戶端發送數據 */ private Session session; /** * 連接成功調用的方法 * * @param session 可選的參數。與某個客戶端的連接會話 */ @OnOpen public void onOpen(Session session) { this.session = session; WEBSOCKETS.add(this); ONLINE_COUNT.incrementAndGet(); log.info("有新的連接加入!當前連接總數為{}", ONLINE_COUNT.get()); } /** * 連接關閉調用的方法 */ @OnClose public void onClose() { WEBSOCKETS.remove(this); ONLINE_COUNT.decrementAndGet(); log.info("有一連接關閉!當前連接總數為{}", ONLINE_COUNT.get()); } @OnMessage public void onMessage(String message) { log.info("WebSocket接收消息:sessionId為{},消息為:{}", this.session.getId(), message); } @OnError public void onError(Session session, Throwable error) { log.error("WebSocket接收消息錯誤{},sessionId為{}", error.getMessage(), session.getId()); error.printStackTrace(); } public void sendMessage(String message) { log.info("WebSocket發送消息:sessionId為{},消息為:{}", this.session.getId(), message); try { this.session.getBasicRemote().sendText(message); } catch (IOException e) { log.error("WebSocket發送消息錯誤{},sessionId為{}", e.getMessage(), session.getId(), e); } } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } MyWebSocketServer that = (MyWebSocketServer) o; return Objects.equals(session, that.session); } @Override public int hashCode() { return Objects.hash(session); } }
#連接地址
ws://ip:port/context-path/webSocket
#在線測試地址