webSocket通用模板

@ServerEndpoint("/websocket/{userId}")
@Component
public class WebSocketServer {

    private Logger logger = LoggerFactory.getLogger(WebSocketServer.class);

    //concurrent包的線程安全Set,用來存放每個客戶端對應的MyWebSocket對象。
    private static ConcurrentHashMap<Long, WebSocketServer> webSocketSet = new ConcurrentHashMap<>();

    // 會話
    private Session session;

    // 用戶id
    private Long userId;

    // 收到請求後調用的方法
    @OnMessage
    public void handleMessage(Session session, String message) {
        logger.info("收到客戶端的請求");
    }

    // 連接建立成功調用的方法
    @OnOpen
    public void onOpen(Session session, @PathParam("userId")Long userId){
        logger.info("建立webSocket的連接");
        this.session = session;
        this.userId = userId;
        webSocketSet.put(userId, this);
    }

    // 連接關閉調用的方法
    @OnClose
    public void onClose() {
        logger.info("關閉socket連接");
        webSocketSet.remove(userId);
    }

    // 發生錯誤調用的方法
    @OnError
    public void onError(Session session, Throwable err) {
        logger.info("發生錯誤");
        err.printStackTrace();
    }

    // 服務器主動發消息, 給指定的用戶發消息
    public void sendMessage(String message, Long userId) {
        try {
          if(webSocketSet.get(userId) != null) {
              webSocketSet.get(userId).sendMessage(message);
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

}

 

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 2979
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章