From cba2e6b90b50c208e3354d4561b40576a251c370 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期六, 04 六月 2022 23:18:01 +0800
Subject: [PATCH] 优化wasm播放器内存占用问题
---
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 133 ++++++++++++++++++++++++++++++-------------
1 files changed, 92 insertions(+), 41 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 6fd171e..3359b00 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -4,6 +4,7 @@
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
+import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler;
import com.genersoft.iot.vmp.service.IDeviceService;
@@ -11,23 +12,18 @@
import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask;
import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
import com.genersoft.iot.vmp.utils.DateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
-import javax.sip.DialogState;
-import javax.sip.TimeoutEvent;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
+import java.time.Instant;
import java.util.List;
+import java.util.concurrent.TimeUnit;
/**
* 璁惧涓氬姟锛堢洰褰曡闃咃級
@@ -65,7 +61,7 @@
@Override
public void online(Device device) {
- logger.info("[璁惧涓婄嚎]锛宒eviceId锛�" + device.getDeviceId());
+ logger.info("[璁惧涓婄嚎] deviceId锛歿}->{}:{}", device.getDeviceId(), device.getIp(), device.getPort());
Device deviceInRedis = redisCatchStorage.getDevice(device.getDeviceId());
Device deviceInDb = deviceMapper.getDeviceByDeviceId(device.getDeviceId());
@@ -73,29 +69,23 @@
if (deviceInRedis != null && deviceInDb == null) {
// redis 瀛樺湪鑴忔暟鎹�
redisCatchStorage.clearCatchByDeviceId(device.getDeviceId());
-
}
- if (device.getCreateTime() == null) {
- device.setCreateTime(now);
- }
- if (device.getRegisterTime() == null) {
- device.setRegisterTime(now);
- }
- if(device.getUpdateTime() == null) {
- device.setUpdateTime(now);
- }
+ device.setUpdateTime(now);
device.setOnline(1);
// 绗竴娆′笂绾�
if (device.getCreateTime() == null) {
+ device.setCreateTime(now);
logger.info("[璁惧涓婄嚎,棣栨娉ㄥ唽]: {}锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
+ deviceMapper.add(device);
+ redisCatchStorage.updateDevice(device);
commander.deviceInfoQuery(device);
sync(device);
- deviceMapper.add(device);
}else {
deviceMapper.update(device);
+ redisCatchStorage.updateDevice(device);
}
- redisCatchStorage.updateDevice(device);
+
// 涓婄嚎娣诲姞璁㈤槄
if (device.getSubscribeCycleForCatalog() > 0) {
// 鏌ヨ鍦ㄧ嚎璁惧閭d簺寮�鍚簡璁㈤槄锛屼负璁惧寮�鍚畾鏃剁殑鐩綍璁㈤槄
@@ -106,10 +96,7 @@
}
// 鍒锋柊杩囨湡浠诲姟
String registerExpireTaskKey = registerExpireTaskKeyPrefix + device.getDeviceId();
- dynamicTask.stop(registerExpireTaskKey);
- dynamicTask.startDelay(registerExpireTaskKey, ()->{
- offline(device.getDeviceId());
- }, device.getExpires() * 1000);
+ dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId()), device.getExpires() * 1000);
}
@Override
@@ -157,8 +144,16 @@
if (device == null || device.getSubscribeCycleForCatalog() < 0) {
return false;
}
- logger.info("绉婚櫎鐩綍璁㈤槄: {}", device.getDeviceId());
- dynamicTask.stop(device.getDeviceId() + "catalog");
+ logger.info("[绉婚櫎鐩綍璁㈤槄]: {}", device.getDeviceId());
+ String taskKey = device.getDeviceId() + "catalog";
+ if (device.getOnline() == 1) {
+ Runnable runnable = dynamicTask.get(taskKey);
+ if (runnable instanceof ISubscribeTask) {
+ ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
+ subscribeTask.stop();
+ }
+ }
+ dynamicTask.stop(taskKey);
return true;
}
@@ -182,8 +177,16 @@
if (device == null || device.getSubscribeCycleForCatalog() < 0) {
return false;
}
- logger.info("绉婚櫎绉诲姩浣嶇疆璁㈤槄: {}", device.getDeviceId());
- dynamicTask.stop(device.getDeviceId() + "mobile_position");
+ logger.info("[绉婚櫎绉诲姩浣嶇疆璁㈤槄]: {}", device.getDeviceId());
+ String taskKey = device.getDeviceId() + "mobile_position";
+ if (device.getOnline() == 1) {
+ Runnable runnable = dynamicTask.get(taskKey);
+ if (runnable instanceof ISubscribeTask) {
+ ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
+ subscribeTask.stop();
+ }
+ }
+ dynamicTask.stop(taskKey);
return true;
}
@@ -223,18 +226,9 @@
@Override
public boolean expire(Device device) {
- Date registerTimeDate;
- try {
- registerTimeDate = DateUtil.format.parse(device.getRegisterTime());
- } catch (ParseException e) {
- logger.error("璁惧鏃堕棿鏍煎紡鍖栧け璐ワ細{}->{} ", device.getDeviceId(), device.getRegisterTime() );
- return false;
- }
- int expires = device.getExpires();
- Calendar calendarForExpire = Calendar.getInstance();
- calendarForExpire.setTime(registerTimeDate);
- calendarForExpire.set(Calendar.SECOND, calendarForExpire.get(Calendar.SECOND) + expires);
- return calendarForExpire.before(DateUtil.getNow());
+ Instant registerTimeDate = Instant.from(DateUtil.formatter.parse(device.getRegisterTime()));
+ Instant expireInstant = registerTimeDate.plusMillis(TimeUnit.SECONDS.toMillis(device.getExpires()));
+ return expireInstant.isBefore(Instant.now());
}
@Override
@@ -250,4 +244,61 @@
public Device getDeviceByHostAndPort(String host, int port) {
return deviceMapper.getDeviceByHostAndPort(host, port);
}
+
+ @Override
+ public void updateDevice(Device device) {
+
+ Device deviceInStore = deviceMapper.getDeviceByDeviceId(device.getDeviceId());
+ if (deviceInStore == null) {
+ logger.warn("鏇存柊璁惧鏃舵湭鎵惧埌璁惧淇℃伅");
+ return;
+ }
+ if (!StringUtils.isEmpty(device.getName())) {
+ deviceInStore.setName(device.getName());
+ }
+ if (!StringUtils.isEmpty(device.getCharset())) {
+ deviceInStore.setCharset(device.getCharset());
+ }
+ if (!StringUtils.isEmpty(device.getMediaServerId())) {
+ deviceInStore.setMediaServerId(device.getMediaServerId());
+ }
+
+ // 鐩綍璁㈤槄鐩稿叧鐨勪俊鎭�
+ if (device.getSubscribeCycleForCatalog() > 0) {
+ if (deviceInStore.getSubscribeCycleForCatalog() == 0 || deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) {
+ deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
+ // 寮�鍚闃�
+ addCatalogSubscribe(deviceInStore);
+ }
+ }else if (device.getSubscribeCycleForCatalog() == 0) {
+ if (deviceInStore.getSubscribeCycleForCatalog() != 0) {
+ deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
+ // 鍙栨秷璁㈤槄
+ removeCatalogSubscribe(deviceInStore);
+ }
+ }
+
+ // 绉诲姩浣嶇疆璁㈤槄鐩稿叧鐨勪俊鎭�
+ if (device.getSubscribeCycleForMobilePosition() > 0) {
+ if (deviceInStore.getSubscribeCycleForMobilePosition() == 0 || deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) {
+ deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval());
+ deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition());
+ // 寮�鍚闃�
+ addMobilePositionSubscribe(deviceInStore);
+ }
+ }else if (device.getSubscribeCycleForMobilePosition() == 0) {
+ if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) {
+ // 鍙栨秷璁㈤槄
+ removeMobilePositionSubscribe(deviceInStore);
+ }
+ }
+
+ String now = DateUtil.getNow();
+ device.setUpdateTime(now);
+ device.setCharset(device.getCharset().toUpperCase());
+ device.setUpdateTime(DateUtil.getNow());
+ if (deviceMapper.update(device) > 0) {
+ redisCatchStorage.updateDevice(device);
+ }
+ }
}
--
Gitblit v1.8.0