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);
}
/**
* 通道发送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的计数又会重新从0开始.
如果建立了多个通道,那他们的id可能为(0,1818,70cc).
因为通道断开,对应的webSocketSession对象被释放,所以不同通道直接的id可能是不连续的.
3.由于在业务中有用到这个id,但对于16进制感觉不合适,想对其生成规则进行重写.
但在WsSession中id属性是使用final修饰的,无法进行修改,所以只能作罢
因为对webSocket的使用经验比较少,所以就不再考虑使用其他方案对其进行改进.
后续会尝试去研究一下在聊天,游戏领域对于webSocket是如何进行使用的.
private final String id;