La plataforma de análisis inteligente de video EasyCVR establece una conexión con la plataforma de terceros a través de websocket y la red se desconecta y no se puede volver a conectar ¿Cómo solucionarlo?

En muchos casos, el protocolo comúnmente utilizado es el protocolo http, pero http tiene una deficiencia obvia: la comunicación solo puede ser iniciada por el cliente, por lo que al compilar proyectos como la plataforma de gestión integrada de video, cuando se trata de la comunicación bidireccional entre el servidor y el cliente, necesita ser implementado a través de otro protocolo, el protocolo websocket. Bajo el protocolo websocket, el servidor puede enviar información de forma activa al cliente, y el cliente también puede enviar información de forma activa al servidor, que es un verdadero diálogo de igualdad de dos vías.

99.png

Cuando usamos el sistema de análisis inteligente de monitoreo de seguridad EasyCVR para conectarnos a una plataforma de terceros, cuando se establece una conexión con una plataforma de terceros a través de una conexión larga de websocket, la red se desconecta repentinamente en este momento, o el tercero el servicio se bloquea y se reinicia, lo que significa que la conexión se interrumpe repentinamente, lo que provocará el establecimiento. El enlace websocket no se puede volver a conectar y el mensaje del programa se ha bloqueado.

Cuando se inicia el programa, el estado del enlace impreso es el siguiente:

38.png

El servidor de terceros está en el estado de solicitud:

39.png

Cuando el servidor se reinicia o el enlace se desconecta, el cliente se bloquea y el programa se bloquea:

40.png

En este momento, el código de cliente para establecer un código de conexión es el siguiente:

//ping
upaliServer.ping()
writeFunc := func(params []byte) {
       upaliServer.WriteMessage(websocket.BinaryMessage, params)
}
cseqFunc := func() uint32 {
       return RequestCstq.getValue()
}
//初始化api
messapi.Init(writeFunc, cseqFunc)

Este código en realidad no es lo suficientemente perfecto, por lo que aquí primero definimos la URL del enlace, luego iniciamos el método de monitoreo de ping después de establecer la conexión, y luego intentamos establecer una conexión con el servidor en un bucle después de que el enlace se desconecta, si falla , espere un período de tiempo y luego nuevamente Intente y salga del proceso tratando de establecer una conexión después del éxito.

log.Printf("connecting to %s", s.url.String())
wsktDlr := websocket.Dialer{TLSClientConfig: &tls.Config{RootCAs: nil, InsecureSkipVerify: true}}
c, hrsp, err := wsktDlr.Dial(s.url.String(), nil)
if err != nil {
       log.Printf("dial err %s", err.Error())
       time.Sleep(time.Second * 10)
       continue
}
if hrsp == nil && hrsp.StatusCode != 200 {
       log.Printf("dial hrsp %v", hrsp)
       time.Sleep(time.Second)
       continue
}
s.client = c
s.connected = true

Pruebe de nuevo cuando el servidor esté desconectado, el cliente puede ver que está intentando volver a conectarse.

41.png

Cuando se reinicia el servidor, el cliente puede conectarse rápidamente a él y el problema se ha resuelto en este momento.

42.png

Supongo que te gusta

Origin blog.csdn.net/TsingSee/article/details/114998562
Recomendado
Clasificación