springboot創建websocket服務-ws方式


#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

 

#在線測試地址

http://coolaf.com/tool/chattest


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM