public class MyWebSocket {
//session为与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 连接建立成功调用的方法
*
* @param session 可选的参数
* @throws Exception
*/
@OnOpen
public void onOpen(Session session) throws Exception {
this.session = session;
System.out.println("Open");
}
/**
* 连接关闭调用的方法
*
* @throws Exception
*/
@OnClose
public void onClose() throws Exception {
wsMapStatus.put("default", 0);
log.info("关闭客户" + "消息");
}
private static TaskWorkService taskWorkService;
@Autowired
public void setTaskWorkService(TaskWorkService taskWorkService) {
MyWebSocket.taskWorkService = taskWorkService;
}
//存储各客户连接状态 重复访问和循环停止基于此判断 1连接中,0未连接
public ConcurrentHashMap<String, Integer> wsMapStatus = new ConcurrentHashMap<>();
//存储各客户请求体 定时自动请求从中获取
public ConcurrentHashMap<String, QueryMissionControlDto> wsMapRequest = new ConcurrentHashMap<>();
@OnMessage
public void onMessage(String message) throws Exception {
String defCustSerial="default";
if (null != message) {
QueryMissionControlDto dto = JSON.parseObject(message, QueryMissionControlDto.class);
wsMapRequest.put(defCustSerial,dto);
if (null == wsMapStatus.get(defCustSerial) || wsMapStatus.get(defCustSerial).equals(0)) {
wsMapStatus.put(defCustSerial, 1);
new Thread(() -> {
int i = 0;
while (true) {
try {
i++;
QueryMissionControlDto innerDto=wsMapRequest.get(defCustSerial);
String custSerial = innerDto.getCustSerial();
sendMessage(JSON.toJSONString(taskWorkService.queryMissionControl(innerDto)));
//sendMessage("客户:" + custSerial + " 累计发送" + i + "次");
log.info("客户:" + custSerial + " 累计发送" + i + "次");
//此处间隔时间与@Scheduled逻辑保持一直,完成后开始间隔
Thread.sleep(5000);
if (wsMapStatus.get(defCustSerial).equals(0)) {
break;
}
} catch (Exception e) {
log.error(e.toString());
}
}
}).start();
}else{
String custSerial = dto.getCustSerial();
sendMessage(JSON.toJSONString(taskWorkService.queryMissionControl(dto)));
//sendMessage("客户:" + custSerial + " 累计发送" );
}
log.info("线程开启了");
}
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
error.printStackTrace();
}
}
【功能开发】SpringBoot WebSocket实现定时主动推送
最新推荐文章于 2024-03-25 17:50:49 发布