La conexión entre el cliente y el servidor se basa en una conexión larga TCP; el cliente se conecta al puerto 2181 predeterminado del servidor, que es la sesión (session).
Desde el establecimiento de la primera conexión, el cliente inicia el ciclo de vida de la sesión. El cliente envía solicitudes de paquetes ping al servidor. Cada sesión puede establecer un tiempo de espera.
Creación de la sesión
sessionID:ID de sesión, que se utiliza para identificar de manera única una sesión. Cada vez que un cliente crea una sesión, Zookeeper le asigna un sessionID único global. Zookeeper crea el sessionID en el código fuente de la clase SessionTrackerImpl.

Timeout:Tiempo de espera de sesión. Cuando el cliente construye una instancia de Zookeeper, envía el tiempo de espera configurado al servidor. El lado del servidor, según sus propios límites de tiempo de espera, confirma finalmente el tiempo de espera de la sesión.
TickTime:Punto de tiempo para la próxima expiración de sesión, por defecto 2000 milisegundos. Se puede configurar en el archivo de configuración zoo.cfg, para que el lado del servidor implemente lagestión de la estrategia de agrupación en cubos.。
isClosing:Este atributo marca si una sesión ya ha sido cerrada. Cuando el lado del servidor detecta que la sesión ha expirado y es inválida, la sesión se marca como "cerrada" y ya no se procesan nuevas solicitudes de esa sesión.
Estado de la sesión
A continuación se presentan varios estados importantes:
-
connecting:Conectando. Una vez que se establece la sesión, el estado es "connecting" (conectando), por un tiempo muy corto.
-
connected:Conectado. Es el estado después de una conexión exitosa.
-
closed:Cerrado. Ocurre cuando la sesión expira, generalmente debido a que el cliente no puede reconectarse por fallos de red, caída del servidor o desconexión activa del cliente.
Gestión del tiempo de espera de sesión (estrategia de agrupación en cubos + activación de sesión)
Durante la ejecución, el servidor líder de Zookeeper realiza comprobaciones periódicas de tiempo de espera de sesión. El intervalo de tiempo es ExpirationInterval, en milisegundos, y el valor predeterminado es tickTime. Cada tickTime se realiza una comprobación de tiempo de espera de sesión.

Método de cálculo de ExpirationTime:
ExpirationTime = CurrentTime + SessionTimeout; ExpirationTime = (ExpirationTime / ExpirationInterval + 1) * ExpirationInterval;
Durante el funcionamiento de Zookeeper, el cliente envía solicitudes (incluidas lecturas y escrituras) o solicitudes ping dentro del rango de tiempo de espera de la sesión, comúnmente llamadodetección de latidos (heartbeat)para completar la activación de la sesión y así mantener la validez de la sesión.
Proceso de activación de sesión:

Después de la activación, se lleva a cabo el proceso de migración de la sesión y luego comienza una nueva ronda:
