修复用户在线状态会自动掉线的问题。
This commit is contained in:
parent
39b4a1786d
commit
310df93499
@ -23,8 +23,9 @@ public enum MessageType {
|
||||
ONLINE_USERS,
|
||||
/* 通知客户端,他人进入文件*/
|
||||
INTO_FILE_ID,
|
||||
/* PONG */
|
||||
PONG,
|
||||
/* ping */
|
||||
PING,
|
||||
|
||||
|
||||
/* C -> S message */
|
||||
/* 设置断点 */
|
||||
@ -35,8 +36,9 @@ public enum MessageType {
|
||||
LOGIN,
|
||||
/* 设置当前所在文件 */
|
||||
SET_FILE_ID,
|
||||
/* ping */
|
||||
PING,
|
||||
/* PONG */
|
||||
PONG,
|
||||
|
||||
|
||||
/* S <-> S -> C message*/
|
||||
/* 获取当前在线用户 */
|
||||
|
||||
@ -29,6 +29,10 @@ public class WebSocketSessionManager {
|
||||
|
||||
private static String instanceId;
|
||||
|
||||
private static final int CHECK_INTERVAL = 20;
|
||||
|
||||
private static final int KEEPALIVE_TIMEOUT = 60 * 1000;
|
||||
|
||||
private static final List<Pair<String, String>> MESSAGE_CACHE = new ArrayList<>(200);
|
||||
|
||||
public static void add(MagicConsoleSession session) {
|
||||
@ -43,7 +47,7 @@ public class WebSocketSessionManager {
|
||||
// 1秒1次发送日志
|
||||
new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-send-log-task")).scheduleAtFixedRate(WebSocketSessionManager::flushLog, 1, 1, TimeUnit.SECONDS);
|
||||
// 60秒检测一次是否在线
|
||||
new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")).scheduleAtFixedRate(WebSocketSessionManager::checkSession, 60, 60, TimeUnit.SECONDS);
|
||||
new ScheduledThreadPoolExecutor(1, r -> new Thread(r, "magic-api-websocket-clean-task")).scheduleAtFixedRate(WebSocketSessionManager::checkSession, CHECK_INTERVAL, CHECK_INTERVAL, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public static Collection<MagicConsoleSession> getSessions() {
|
||||
@ -193,8 +197,9 @@ public class WebSocketSessionManager {
|
||||
|
||||
private static void checkSession() {
|
||||
try {
|
||||
long activateTime = System.currentTimeMillis() - 20 * 1000;
|
||||
long activateTime = System.currentTimeMillis() - KEEPALIVE_TIMEOUT;
|
||||
SESSIONS.entrySet().stream()
|
||||
.peek(it -> WebSocketSessionManager.sendBySession(it.getValue(), WebSocketSessionManager.buildMessage(MessageType.PING)))
|
||||
.filter(it -> it.getValue().getActivateTime() < activateTime)
|
||||
.collect(Collectors.toList())
|
||||
.forEach(entry -> {
|
||||
|
||||
@ -104,7 +104,9 @@ public class MagicWebSocketDispatcher extends TextWebSocketHandler {
|
||||
MagicConsoleSession mcsession = MagicConsoleSession.from(session);
|
||||
WebSocketSessionManager.remove(mcsession);
|
||||
MagicConsoleSession.remove(session);
|
||||
WebSocketSessionManager.sendToAll(MessageType.USER_LOGOUT, mcsession.getAttributes());
|
||||
if(mcsession.getClientId() != null && mcsession.getAttributes() != null && !mcsession.getAttributes().isEmpty()){
|
||||
WebSocketSessionManager.sendToAll(MessageType.USER_LOGOUT, mcsession.getAttributes());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -75,11 +75,9 @@ public class MagicWorkbenchHandler {
|
||||
}
|
||||
}
|
||||
|
||||
@Message(MessageType.PING)
|
||||
public void ping(MagicConsoleSession session){
|
||||
long activateTime = System.currentTimeMillis();
|
||||
session.setActivateTime(activateTime);
|
||||
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.PONG, activateTime));
|
||||
@Message(MessageType.PONG)
|
||||
public void pong(MagicConsoleSession session){
|
||||
session.setActivateTime(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
private List<Map<String, Object>> getOnlineUsers(){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user