美文网首页
springBoot下开发webSocket的sessionId

springBoot下开发webSocket的sessionId

作者: Mzs_ | 来源:发表于2019-04-09 18:15 被阅读0次

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;

相关文章

网友评论

      本文标题:springBoot下开发webSocket的sessionId

      本文链接:https://www.haomeiwen.com/subject/wemiiqtx.html