package com.iailab.framework.websocket.core.session; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator; import org.springframework.web.socket.handler.WebSocketHandlerDecorator; /** * {@link WebSocketHandler} 的装饰类,实现了以下功能: * * 1. {@link WebSocketSession} 连接或关é—时,使用 {@link #sessionManager} è¿›è¡Œç®¡ç† * 2. å°è£… {@link WebSocketSession} 支æŒå¹¶å‘æ“作 * * @author iailab */ public class WebSocketSessionHandlerDecorator extends WebSocketHandlerDecorator { /** * å‘é€æ—¶é—´çš„é™åˆ¶ï¼Œå•ä½ï¼šæ¯«ç§’ */ private static final Integer SEND_TIME_LIMIT = 1000 * 5; /** * å‘é€æ¶ˆæ¯ç¼“冲上线,å•ä½ï¼šbytes */ private static final Integer BUFFER_SIZE_LIMIT = 1024 * 100; private final WebSocketSessionManager sessionManager; public WebSocketSessionHandlerDecorator(WebSocketHandler delegate, WebSocketSessionManager sessionManager) { super(delegate); this.sessionManager = sessionManager; } @Override public void afterConnectionEstablished(WebSocketSession session) { // 实现 session 支æŒå¹¶å‘,å¯å‚考 https://blog.csdn.net/abu935009066/article/details/131218149 session = new ConcurrentWebSocketSessionDecorator(session, SEND_TIME_LIMIT, BUFFER_SIZE_LIMIT); // æ·»åŠ åˆ° WebSocketSessionManager ä¸ sessionManager.addSession(session); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { sessionManager.removeSession(session); } }