zhangmeng
2019-11-27 e8bfcf3115506b2c4109d912dd1bffc7e8c44d9b
update
3个文件已修改
101 ■■■■■ 已修改文件
camera/camera.go 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sdk/sdk.go 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/util.go 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
camera/camera.go
@@ -129,20 +129,20 @@
            return
        default:
            if recvmessage, err = socket.Sock.Recv(); err != nil {
                //logger.Error("[camera] err is: ", err)
                if socket.UseSHM {
                    if tryCount > util.SHMMaxTryCount {
                        socket.Sock.Close()
                        socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                        logger.Info("CAMERA SHM TRY :", tryCount, " RESTART IT")
                tryCount++
                socket = util.MaybeRestartSocket(socket, &tryCount)
                        tryCount = 0
                        continue
                    }
                    tryCount++
                }
                // if socket.UseSHM {
                //     if tryCount > util.SHMMaxTryCount {
                //         socket.Sock.Close()
                //         socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                //         logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT")
                //         tryCount = 0
                //         continue
                //     }
                //     tryCount++
                // }
                continue
            }
sdk/sdk.go
@@ -220,18 +220,19 @@
            return
        default:
            if msg, err := socket.Sock.Recv(); err != nil {
                if socket.UseSHM {
                    if tryCount > util.SHMMaxTryCount {
                        socket.Sock.Close()
                        socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                        logger.Info("SDK RECV SHM TRY :", tryCount, " RESTART IT")
                tryCount++
                socket = util.MaybeRestartSocket(socket, &tryCount)
                        tryCount = 0
                        continue
                    }
                    tryCount++
                }
                // if socket.UseSHM {
                //     if tryCount > util.SHMMaxTryCount {
                //         socket.Sock.Close()
                //         socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                //         logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT")
                //         tryCount = 0
                //         continue
                //     }
                //     tryCount++
                // }
                continue
            } else {
                err = proto.Unmarshal(msg, &repsdkmsg)
@@ -273,18 +274,19 @@
                        logger.Error("failed send:sdkid=", sdkid)
                    }
                    if socket.UseSHM {
                        if tryCount > util.SHMMaxTryCount {
                            socket.Sock.Close()
                            socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                            logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT")
                    tryCount++
                    socket = util.MaybeRestartSocket(socket, &tryCount)
                            tryCount = 0
                            continue
                        }
                        tryCount++
                    }
                    // if socket.UseSHM {
                    //     if tryCount > util.SHMMaxTryCount {
                    //         socket.Sock.Close()
                    //         socket, err = util.NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
                    //         logger.Info("SDK SEND SHM TRY :", util.SHMMaxTryCount, " RESTART IT")
                    //         tryCount = 0
                    //         continue
                    //     }
                    //     tryCount++
                    // }
                    continue
                }
util/util.go
@@ -1,14 +1,21 @@
package util
import (
    "basic.com/valib/deliver.git"
    "context"
    "errors"
    "basic.com/valib/deliver.git"
    "basic.com/valib/logger.git"
)
const SHMMaxTryCount = 3
const (
    // 共享内存发送/接收失败shmMaxTryCount次重新创建通道尝试
    shmMaxTryCount = 7
    // 不论共享内存/mangos发送/接收失败最大次数,认为当前通道不再使用, 关闭
    // 有问题,摄像机长时间断网后重连,但是通道关闭
    tooLongFailed = 300
)
type SocketContext struct {
    Sock    deliver.Deliver
@@ -128,3 +135,23 @@
    return socket, nil
}
func MaybeRestartSocket(socket SocketContext, tryCnt *int) SocketContext {
    if socket.UseSHM {
        if *tryCnt > shmMaxTryCount {
            logger.Info("SDK SEND SHM TRY :", shmMaxTryCount, " RESTART IT")
            socket.Sock.Close()
            newSocket, err := NewSocketListen(socket.Mode, socket.URL, socket.UseSHM)
            if err != nil {
                return socket
            }
            *tryCnt = 0
            return newSocket
        }
    }
    return socket
}