内存泄漏解决测试
This commit is contained in:
parent
02a7738c49
commit
fdc3407b6d
|
|
@ -202,10 +202,10 @@ func GetRealTimeImage(c *gin.Context) {
|
||||||
subscribeAndHandleMessagesV3(ws, deviceIdInt)
|
subscribeAndHandleMessagesV3(ws, deviceIdInt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func subscribeAndHandleMessagesV3(ws *websocket.Conn, device_id int) {
|
func subscribeAndHandleMessagesV3(ws *websocket.Conn, deviceId int) {
|
||||||
// 生成唯一连接 uuid
|
// 生成唯一连接 uuid
|
||||||
con_id := uuid.New().String()
|
con_id := uuid.New().String()
|
||||||
online_conn_key := "device_" + strconv.Itoa(device_id) + "_online_conn_ids"
|
online_conn_key := "device_" + strconv.Itoa(deviceId) + "_online_conn_ids"
|
||||||
// 加入设备在线连接集合
|
// 加入设备在线连接集合
|
||||||
worker.SetRedisSetAddWithExpire(online_conn_key, con_id, time.Minute*5)
|
worker.SetRedisSetAddWithExpire(online_conn_key, con_id, time.Minute*5)
|
||||||
//图片计数器
|
//图片计数器
|
||||||
|
|
@ -217,16 +217,16 @@ func subscribeAndHandleMessagesV3(ws *websocket.Conn, device_id int) {
|
||||||
//计算帧率
|
//计算帧率
|
||||||
for {
|
for {
|
||||||
//从service获取当前帧
|
//从service获取当前帧
|
||||||
c := service.GetDeviceCurrentFrameV2(&img, device_id)
|
c := service.GetDeviceCurrentFrameV2(&img, deviceId)
|
||||||
if c != count {
|
if c != count {
|
||||||
if c == -1 {
|
if c == -1 {
|
||||||
log.Printf("device:%d get frame err!", device_id)
|
log.Printf("device:%d get frame err!", deviceId)
|
||||||
worker.SetRedisSetRemove(online_conn_key, con_id)
|
worker.SetRedisSetRemove(online_conn_key, con_id)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
//将img转[]byte
|
//将img转[]byte
|
||||||
if img.Empty() {
|
if img.Empty() {
|
||||||
log.Printf("device:%d img is empty! count = %d \n", device_id, c)
|
log.Printf("device:%d img is empty! count = %d \n", deviceId, c)
|
||||||
} else {
|
} else {
|
||||||
//gocv.Matrix转为jpeg
|
//gocv.Matrix转为jpeg
|
||||||
buf, err := gocv.IMEncode(".jpg", img)
|
buf, err := gocv.IMEncode(".jpg", img)
|
||||||
|
|
@ -248,9 +248,10 @@ func subscribeAndHandleMessagesV3(ws *websocket.Conn, device_id int) {
|
||||||
if err5 != nil {
|
if err5 != nil {
|
||||||
log.Printf("img close err:%v", err)
|
log.Printf("img close err:%v", err)
|
||||||
}
|
}
|
||||||
|
buf.Close()
|
||||||
t++
|
t++
|
||||||
if t%50 == 0 {
|
if t%50 == 0 {
|
||||||
log.Printf("device:%d send frame count:%d,img is closed", device_id, c)
|
log.Printf("device:%d send frame count:%d,img is closed", deviceId, c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -270,14 +271,9 @@ func subscribeAndHandleMessagesV3(ws *websocket.Conn, device_id int) {
|
||||||
t_count++
|
t_count++
|
||||||
}
|
}
|
||||||
|
|
||||||
err5 := img.Close()
|
|
||||||
if err5 != nil {
|
|
||||||
log.Printf("img close err:%v", err5)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查看是否还有其他连接,没有则设置 is_play 为 0
|
// 查看是否还有其他连接,没有则设置 is_play 为 0
|
||||||
if worker.IsContainKey(online_conn_key) == false {
|
if worker.IsContainKey(online_conn_key) == false {
|
||||||
worker.SetRedisWithExpire(strconv.Itoa(device_id)+"_is_play", "1", time.Minute*5)
|
worker.SetRedisWithExpire(strconv.Itoa(deviceId)+"_is_play", "1", time.Minute*5)
|
||||||
log.Printf("device_id: %d has set is_play to 0", device_id)
|
log.Printf("device_id: %d has set is_play to 0", deviceId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,9 @@ func SetDeviceCurrentFrameV2(frame *gocv.Mat, deviceId int) error {
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("设备:%s 当前帧计数不存在", deviceId)
|
return fmt.Errorf("设备:%s 当前帧计数不存在", deviceId)
|
||||||
}
|
}
|
||||||
|
if frameCount%10 == 0 {
|
||||||
|
log.Printf("设备:%d 当前帧: %d 已更新\n", deviceId, frameCount)
|
||||||
|
}
|
||||||
frameCount++
|
frameCount++
|
||||||
DeviceFrameCount[deviceId] = frameCount
|
DeviceFrameCount[deviceId] = frameCount
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue