A fin de evitar un exceso de solicitudes simultáneas a servidores de aprovisionamiento y stream, el reproductor debe implementar una estrategia de gestión de conexión "razonable". La idea básica es usar un plan de reintentos de "back off" exponencial al intentar reconexiones, donde el reproductor duplica su retardo de reintento en cada intento, hasta cierto límite. Se agrega un elemento de aleatoriedad para distribuir la carga de los intentos de conexión con el tiempo.
El peor de los casos es cuando una gran cantidad de reproductores (por ejemplo, miles) se desconectan al mismo tiempo de un servidor (por ejemplo, debido a una falla del servidor o condiciones de la red). El algoritmo está diseñado para evitar que una gran cantidad de clientes intenten obtener información de aprovisionamiento o conectarse a un stream al mismo tiempo.
El algoritmo de reconexión debe implementarse usando el proceso que se muestra a continuación. (El reproductor finaliza este bucle en cuanto se establece una conexión válida).
Cómo implementar el algoritmo de reconexión:
- Inicialmente configure el retardo de reintento en un número aleatorio de 1 a 5 segundos.
- Obtenga la configuración del stream a través de la API de aprovisionamiento descrita anteriormente.
- Si la solicitud de aprovisionamiento falla, duplique el retardo de reintento (hasta un máximo de 1 minuto), espere el retardo y luego intente de nuevo la solicitud de aprovisionamiento (es decir, vuelva al paso 2). Haga esto hasta que se reciba la información de aprovisionamiento.
- Intente la conexión con el primer servidor de la lista, usando el primer puerto.
- Si la conexión es rechazada, intente con el siguiente puerto. Repita hasta que haya probado todos los puertos de este servidor. Esto se hace para probar puertos no estándar en caso de que el reproductor tenga un firewall estricto.
- Si se llega al final de la lista de servidores, el reproductor debe duplicar el retardo de intento (hasta un máximo de 1 minuto) y luego volver a obtener la información de aprovisionamiento con una nueva solicitud (es decir, vuelva al paso 2).
Visualmente, el proceso puede representarse de la siguiente manera: