对比新文件 |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |