From 783f11f29131a6141cd7f68ded39c9acd93868a6 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 29 七月 2023 16:23:00 +0800
Subject: [PATCH] 优化websocket操作类代码
---
ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java | 2
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | 90 +---------------------
ruoyi-admin/src/main/resources/logback.xml | 2
ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java | 101 ++++++++++++++++++++++++-
4 files changed, 104 insertions(+), 91 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
index 1fe8209..e8d37ae 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
@@ -1,5 +1,6 @@
package com.ruoyi.app.position.service.impl;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.service.IArdAppPositionService;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -20,7 +21,6 @@
* @Version 1.0
* {"enabled":false,"frequency":1000,"userId":"69cf75f289424a48ba10cf33fa324206"}
*/
-@Slf4j
public class AppPositionPushService {
public static Map<String, List<ArdAppPosition>> dataMap = new HashMap<>();//甯歌鏁版嵁 姣忎釜鐢ㄦ埛鍏宠仈
public static Map<String, List<ArdAppPosition>> tempDataMap = new HashMap<>();//涓存椂鏁版嵁 姣忎釜鐢ㄦ埛鍏宠仈
@@ -71,7 +71,6 @@
public static void stopTimerTask(Timer timer) {
if (timer != null) {
timer.cancel();
- log.info("鍋滄杩愯");
}
}
@@ -94,18 +93,112 @@
return ArdAppPositions;
}
+ //杩囨护鍦ㄧ嚎app鐢ㄦ埛
public static List<ArdAppPosition> isOnlie(List<ArdAppPosition> data) {
List<ArdAppPosition> onlineList = new ArrayList<>();
if (data.size() > 0) {
for (ArdAppPosition ardAppPosition : data) {
ISysUserService sysUserService = SpringUtils.getBean(ISysUserService.class);
SysUser sysUser = sysUserService.selectUserById(ardAppPosition.getUserId());
- if (sysUser.getAppOnlineState().equals("1")) {
- onlineList.add(ardAppPosition);
+ if(StringUtils.isNotNull(sysUser)) {
+ if(StringUtils.isNotNull(sysUser.getAppOnlineState())) {
+ if (sysUser.getAppOnlineState().equals("1")) {
+ onlineList.add(ardAppPosition);
+ }
+ }
}
}
}
return onlineList;
}
+ //鎺ユ敹澶勭悊鍣�
+ public static void messageHandler(String userId, String message) {
+ Map<String, Object> map = JSONObject.parseObject(message, Map.class);
+ if (map.size() > 0) {
+ Boolean enabled = (Boolean) map.get("enabled");
+ if (enabled) {
+ //鍚姩鍏ㄥ眬鎺ㄩ��
+ List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.getAppPositionList());
+ AppPositionPushService.dataMap.put(userId, newList);
+ if (!AppPositionPushService.userTimerMap.containsKey(userId)) {
+ Timer timer = AppPositionPushService.startTimerTask(userId, 3000);
+ AppPositionPushService.userTimerMap.put(userId, timer);//灏嗗畾鏃跺櫒鍏宠仈鐢ㄦ埛
+ }
+ } else {
+ //鍋滄鍏ㄥ眬鎺ㄩ��
+ if (AppPositionPushService.userTimerMap.containsKey(userId)) {
+ Timer timer = AppPositionPushService.userTimerMap.get(userId);
+ AppPositionPushService.stopTimerTask(timer);
+ AppPositionPushService.userTimerMap.remove(userId);
+ }
+ if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) {
+ Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId);
+ AppPositionPushService.stopTimerTask(temptimer);
+ AppPositionPushService.tempUserTimerMap.remove(userId);
+ }
+ AppPositionPushService.dataMap.remove(userId);
+ AppPositionPushService.tempDataMap.remove(userId);
+ }
+
+ Integer frequency = (Integer) map.get("frequency");
+ String uId = (String) map.get("userId");
+ if (frequency > 0) {
+ List<ArdAppPosition> List = AppPositionPushService.getAppPositionList().stream()
+ .filter(obj -> !obj.getUserId().equals(uId))
+ .collect(Collectors.toList());//鍘婚櫎寮曞鍚庣殑list
+ AppPositionPushService.dataMap.put(userId, List);
+
+ List<ArdAppPosition> tempList = AppPositionPushService.getAppPositionList().stream()
+ .filter(obj -> obj.getUserId().equals(uId))
+ .collect(Collectors.toList());//鑾峰彇寮曞鐨刲ist
+ AppPositionPushService.tempDataMap.put(userId, tempList);
+ Timer timer = AppPositionPushService.startTempTimerTask(userId, frequency);
+ AppPositionPushService.tempUserTimerMap.put(userId, timer);
+ } else {
+ List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.getAppPositionList());
+ AppPositionPushService.dataMap.put(userId, newList);
+ Timer timer = AppPositionPushService.tempUserTimerMap.get(userId);
+ AppPositionPushService.stopTimerTask(timer);
+ AppPositionPushService.tempUserTimerMap.remove(userId);
+ AppPositionPushService.tempDataMap.remove(userId);
+ }
+ //region 鏃ф柟娉�
+// Map<String, List<ArdAppPosition>> dataMap = new HashMap<>();
+// List<ArdAppPosition> positionList = AppPositionPush.initDataMap.get(userId);//鑾峰彇褰撳墠鐢ㄦ埛鐨勯粯璁ゅ彂閫佺殑鏁版嵁map
+// if(frequency>0)
+// {
+// //鎺ユ敹鍒伴鐜囧ぇ浜�0锛屽睘浜庣敵璇峰紩瀵硷紝鑾峰彇闄ゅ紩瀵煎鐨勫叾浠朼pp鐢ㄦ埛鐨勪綅缃甃ist
+// List<ArdAppPosition> appPositionList = positionList.stream()
+// .filter(obj -> !obj.getUserId().equals(uId))
+// .collect(Collectors.toList());
+// dataMap.put(userId,appPositionList);
+// }
+// else {
+// //鎺ユ敹鍒伴鐜囩瓑浜�0锛屽睘浜庨噴鏀惧紩瀵硷紝鑾峰彇鍒板叏閮╝pp鐢ㄦ埛鐨勪綅缃甃ist
+// dataMap.put(userId,AppPositionPush.getAppPositionList());
+// }
+// AppPositionPush.initDataMap.putAll(dataMap);//鏇存柊鍒濆浼氳瘽榛樿鏁版嵁map
+// AppPositionPush.startLocationPushTask(userId,session,uId, frequency);//寮�鍚柊浠诲姟
+ //endregion
+ }
+ }
+
+ //鍋滄澶勭悊鍣�
+ public static void stopHandler(String userId) {
+ //鍋滄鍏ㄥ眬鎺ㄩ��
+ if (AppPositionPushService.userTimerMap.containsKey(userId)) {
+ Timer timer = AppPositionPushService.userTimerMap.get(userId);
+ AppPositionPushService.stopTimerTask(timer);
+ AppPositionPushService.userTimerMap.remove(userId);
+ }
+ if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) {
+ Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId);
+ AppPositionPushService.stopTimerTask(temptimer);
+ AppPositionPushService.tempUserTimerMap.remove(userId);
+ }
+ AppPositionPushService.dataMap.remove(userId);
+ AppPositionPushService.tempDataMap.remove(userId);
+ // AppPositionPush.stopLocationPushTask(session);//鏃ф柟娉�
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
index b2f003f..82af738 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
@@ -24,7 +24,7 @@
/**
* @ClassName ChatServerEndpoint
- * @Description:
+ * @Description: websocket鎿嶄綔绫�
* @Author 鍒樿嫃涔�
* @Date 2023/1/27 7:42
* @Version 1.0
@@ -54,100 +54,20 @@
WebSocketUtils.sendMessage(session, message);
// sendMessageAll("鐢ㄦ埛[" + userid + "] : " + message);
// 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟
- Map<String, Object> map = JSONObject.parseObject(message, Map.class);
- if (map.size() > 0) {
- Boolean enabled = (Boolean) map.get("enabled");
- if (enabled) {
- //鍚姩鍏ㄥ眬鎺ㄩ��
- List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.getAppPositionList());
- AppPositionPushService.dataMap.put(userId, newList);
- if (!AppPositionPushService.userTimerMap.containsKey(userId)) {
- Timer timer = AppPositionPushService.startTimerTask(userId, 3000);
- AppPositionPushService.userTimerMap.put(userId, timer);//灏嗗畾鏃跺櫒鍏宠仈鐢ㄦ埛
- }
- } else {
- //鍋滄鍏ㄥ眬鎺ㄩ��
- if (AppPositionPushService.userTimerMap.containsKey(userId)) {
- Timer timer = AppPositionPushService.userTimerMap.get(userId);
- AppPositionPushService.stopTimerTask(timer);
- AppPositionPushService.userTimerMap.remove(userId);
- }
- if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) {
- Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId);
- AppPositionPushService.stopTimerTask(temptimer);
- AppPositionPushService.tempUserTimerMap.remove(userId);
- }
- AppPositionPushService.dataMap.remove(userId);
- AppPositionPushService.tempDataMap.remove(userId);
- }
-
- Integer frequency = (Integer) map.get("frequency");
- String uId = (String) map.get("userId");
- if (frequency > 0) {
- List<ArdAppPosition> List = AppPositionPushService.getAppPositionList().stream()
- .filter(obj -> !obj.getUserId().equals(uId))
- .collect(Collectors.toList());//鍘婚櫎寮曞鍚庣殑list
- AppPositionPushService.dataMap.put(userId,List);
-
- List<ArdAppPosition> tempList = AppPositionPushService.getAppPositionList().stream()
- .filter(obj -> obj.getUserId().equals(uId))
- .collect(Collectors.toList());//鑾峰彇寮曞鐨刲ist
- AppPositionPushService.tempDataMap.put(userId, tempList);
- Timer timer = AppPositionPushService.startTempTimerTask(userId, frequency);
- AppPositionPushService.tempUserTimerMap.put(userId, timer);
- } else {
- List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.getAppPositionList());
- AppPositionPushService.dataMap.put(userId, newList);
- Timer timer = AppPositionPushService.tempUserTimerMap.get(userId);
- AppPositionPushService.stopTimerTask(timer);
- AppPositionPushService.tempUserTimerMap.remove(userId);
- AppPositionPushService.tempDataMap.remove(userId);
- }
- //region 鏃ф柟娉�
-// Map<String, List<ArdAppPosition>> dataMap = new HashMap<>();
-// List<ArdAppPosition> positionList = AppPositionPush.initDataMap.get(userId);//鑾峰彇褰撳墠鐢ㄦ埛鐨勯粯璁ゅ彂閫佺殑鏁版嵁map
-// if(frequency>0)
-// {
-// //鎺ユ敹鍒伴鐜囧ぇ浜�0锛屽睘浜庣敵璇峰紩瀵硷紝鑾峰彇闄ゅ紩瀵煎鐨勫叾浠朼pp鐢ㄦ埛鐨勪綅缃甃ist
-// List<ArdAppPosition> appPositionList = positionList.stream()
-// .filter(obj -> !obj.getUserId().equals(uId))
-// .collect(Collectors.toList());
-// dataMap.put(userId,appPositionList);
-// }
-// else {
-// //鎺ユ敹鍒伴鐜囩瓑浜�0锛屽睘浜庨噴鏀惧紩瀵硷紝鑾峰彇鍒板叏閮╝pp鐢ㄦ埛鐨勪綅缃甃ist
-// dataMap.put(userId,AppPositionPush.getAppPositionList());
-// }
-// AppPositionPush.initDataMap.putAll(dataMap);//鏇存柊鍒濆浼氳瘽榛樿鏁版嵁map
-// AppPositionPush.startLocationPushTask(userId,session,uId, frequency);//寮�鍚柊浠诲姟
- //endregion
- }
+ AppPositionPushService.messageHandler(userId,message);
}
@OnClose
public void onClose(@PathParam("userId") String userId, Session session) {
//褰撳墠鐨凷ession 绉婚櫎
WebSocketUtils.ONLINE_USER_SESSIONS.remove(userId);
-// //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡
+ //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡
String message = "鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�";
-// sendMessage(session,message);
+ //sendMessage(session,message);
log.info("娑堟伅锛�" + message);
try {
session.close();
- //鍋滄鍏ㄥ眬鎺ㄩ��
- if (AppPositionPushService.userTimerMap.containsKey(userId)) {
- Timer timer = AppPositionPushService.userTimerMap.get(userId);
- AppPositionPushService.stopTimerTask(timer);
- AppPositionPushService.userTimerMap.remove(userId);
- }
- if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) {
- Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId);
- AppPositionPushService.stopTimerTask(temptimer);
- AppPositionPushService.tempUserTimerMap.remove(userId);
- }
- AppPositionPushService.dataMap.remove(userId);
- AppPositionPushService.tempDataMap.remove(userId);
- // AppPositionPush.stopLocationPushTask(session);//鏃ф柟娉�
+ AppPositionPushService.stopHandler(userId);
} catch (IOException e) {
log.error("onClose error", e);
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
index 5d35ed4..7fc9943 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
@@ -38,7 +38,7 @@
}
synchronized(session) {
try {
- log.info("鍙戦�佹秷鎭細"+message);
+ log.debug("鍙戦�佹秷鎭細"+message);
session.getBasicRemote().sendText(message);
} catch (IOException e) {
log.error("sendMessage IOException ",e);
diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
index 197ae9d..ab7a75a 100644
--- a/ruoyi-admin/src/main/resources/logback.xml
+++ b/ruoyi-admin/src/main/resources/logback.xml
@@ -233,7 +233,7 @@
<appender-ref ref="stealAlarm"/>
</logger>
<!--websocket鏃ュ織鎵撳嵃绛夌骇-->
- <logger name="websocket" level="INFO">
+ <logger name="websocket" level="DEBUG">
<appender-ref ref="websocket"/>
</logger>
<!--鍏夌數宸℃鏃ュ織鎵撳嵃绛夌骇-->
--
Gitblit v1.9.3