1.具體使用這里不展開,通過繼承TextWebSocketHandler類重寫了其父類AbstractWebSocketHandler的幾個相關方法
/**
* Created by MZS on 2019/4/9.
*/
public class Test extends TextWebSocketHandler {
/**
* 建立連接之后
*
* @param session
* @throws Exception
*/
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
super.afterConnectionEstablished(session);
}
/**
* 收到消息
*
* @param session
* @param message
* @throws Exception
*/
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
super.handleMessage(session, message);
}
/**
* 收到消息
*
* @param session
* @param message
* @throws Exception
*/
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
super.handleTextMessage(session, message);
}
/**
* 通道發(fā)送error時
*
* @param session
* @param exception
* @throws Exception
*/
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
super.handleTransportError(session, exception);
}
/**
* 通道關閉后
*
* @param session
* @param status
* @throws Exception
*/
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
super.afterConnectionClosed(session, status);
}
}
2.這個的webSocket是由tomcat維護的,具體的sessionId的生成在org.apache.tomcat.websocket.WsSession中.
this.id = Long.toHexString(ids.getAndIncrement());
是一個遞增的16進制并轉為字符串,每次重啟服務,這個id的計數(shù)又會重新從0開始.
如果建立了多個通道,那他們的id可能為(0,1818,70cc).
因為通道斷開,對應的webSocketSession對象被釋放,所以不同通道直接的id可能是不連續(xù)的.
3.由于在業(yè)務中有用到這個id,但對于16進制感覺不合適,想對其生成規(guī)則進行重寫.
但在WsSession中id屬性是使用final修飾的,無法進行修改,所以只能作罷
因為對webSocket的使用經(jīng)驗比較少,所以就不再考慮使用其他方案對其進行改進.
后續(xù)會嘗試去研究一下在聊天,游戲領域對于webSocket是如何進行使用的.
private final String id;