Merge remote-tracking branch 'origin/dev_2.0.0' into dev_2.0.0
commit
f38198085b
@ -0,0 +1,48 @@
|
||||
package com.supervision.task;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.supervision.constant.UserTokenConstant;
|
||||
import com.supervision.controller.WebSocketServer;
|
||||
import com.supervision.usermanage.UserResourceCheck;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.websocket.Session;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class WebsocketKeepaliveTask {
|
||||
|
||||
private final RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
@Scheduled(fixedDelay = 5 * 1000L)
|
||||
public void keepalive() {
|
||||
log.info("websocket保活接口开始,每5秒钟发送一次消息");
|
||||
for (Map.Entry<String, Session> entries : WebSocketServer.SESSION_POOL.entrySet()) {
|
||||
String userId = entries.getKey();
|
||||
Session session = entries.getValue();
|
||||
if (ObjectUtil.isNotEmpty(session)) {
|
||||
try {
|
||||
|
||||
session.getBasicRemote().sendText(JSONUtil.toJsonStr(new UserResourceCheck.Keepalive()));
|
||||
log.info("用户:{}的websocket保活成功", userId);
|
||||
} catch (IOException e) {
|
||||
log.error("用户:{}的websocket连接异常", userId, e);
|
||||
// 连接异常的用户,移除
|
||||
WebSocketServer.SESSION_POOL.remove(userId);
|
||||
// 移除redis中该用户的缓存
|
||||
redisTemplate.opsForHash().delete(UserTokenConstant.USER_WEBSOCKET_CACHE, userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("websocket保活接口结束");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue