FANDOM


El Gestor de Estado de Servidor (GES) es un método que usa el cliente para detectar si el servidor de la liga en cuestión está en línea o fuera de línea. El gestor ha pasado por distintas formas de detectarlo.

Detección por estado en tabla "server_status"

Bug.jpg
Esta característica/función/versión está buggeada y actualmente no funciona correctamente.

Básicamente consiste en un valor booleano determinado por la casilla "Status" en la tabla "server_status". Cuando toma valor 0, el servidor está offline; cuando toma valor 1, el servidor está online.

Es importante tener en cuenta que esta característica NO se ha eliminado y sigue vigente, pero actualmente está en desuso. El antiguo servidor programado en VBA cambiaba el valor de este campo a 1 cuando se encendía, y lo cambiaba a 0 cuando el usuario apretaba el botón "SALIR", cancelando el proceso de simulación. Con el nuevo servidor escrito en C++, no existe ningún método para detener el anterior proceso y cambiar este valor a 0, es más, la única manera de detener el servidor es cerrando la ventana, dejando el valor del campo a 1. Por esta razón, con el nuevo servidor este método deja de ser útil y es necesario buscar otra manera de hacerlo.

Detección por petición del cliente

Esta característica NO está implementada ni lo estuvo nunca, fue tan sólo un método más que estuvo planeado sacar. De hecho, si observamos los campos de la tabla "server_status", veremos un campo que se llama "Petition", que está en desuso y probablemente sea eliminado en una futura actualización.

Este método estaba planeado implementarlo ya para el servidor VBA, ya que el método de detección por estado en la tabla "server_status"  no es tampoco perfecto, ya que el usuario puede cerrar el servidor fácilmente por el botón cerrar, o simplemente que se quede sin conexión a Internet y no pueda volver a poner el campo a 0.

Consistiría en que el cliente pusiera el valor del campo "Petition" a 1, indicando así al servidor que se ha realizado una petición de comprobar si el servidor sigue on-line o no. El servidor cada cierto tiempo comprobaría ese valor, y si está en 1 volvería a poner el valor en 0, indicando al cliente que el servidor sigue conectado. En caso de no estarlo, el cliente esperaría cierto tiempo, hasta que se produjera un Timeout, lo que quiere decir que el servidor ya no está conectado, por lo que el cliente cambiaría el estado a 0 y la petición a 0.

Este método serviría perfectamente para el servidor C++ también, sin embargo no se implementó por varias razones. Primero, que para detectar si el servidor está off-line primero alguien tiene que hacer la petición, y si nadie la hace daría siempre falsos "online". Segundo, el tiempo de espera sería largo (para no saturar el server MySQL), por lo que habría que esperar mucho tiempo para conocer el estado del servidor. Tercero, es un gran agujero de seguridad, ya que si el cliente tiene permisos de escritura la liga se vuelve fácilmente manipulable. El cliente actual sólo realiza operaciones de lectura, así que lo ideal es dar a los clientes un usuario MySQL sólo con permisos de lectura.

Detección Inteligente de Servidor Offline (DISO)

Este es el método implementado de manera oficial, el que se usa actualmente. Es un método que con la configuración actual no fallaría casi nunca (explicaremos esto más adelante), pero con las futuras actualizaciones no.

En la versión actual, el tiempo de espera entre partido y partido es de 10 minutos, que a su vez se divide en dos partes de 5 minutos: una de "preparación" y otra de "juego". Para almacenar el tiempo que falta, el servidor obtiene el número de segundos que han pasado desde medianoche y le suma 300, obteniendo así cuándo acabará el partido o la preparación, según cada caso. El cliente saca este valor y le resta el número de segundos que han pasado desde medianoche, obteniendo así el número de segundos que faltan. Posteriormente realiza una conversión pasando a minutos y segundos y lo muestra. Para la cuenta atrás, va restando 1 cada segundo, y cuando llegue a 0, realiza una actualización (recarga completa del cliente). Antiguamente esto se hacía de una manera que saturaba mucho más el server (escribiendo CADA SEGUNDO el nº de segundos que faltaban), pero de esta manera el servidor se satura muchísimo menos.

En un servidor offline, este número de segundos iría bajando hasta hacerse negativo, ya que el tiempo en el que terminaría se haría más pequeño que el actual. Básicamente DISO detecta cuándo este valor se hace negativo (con un margen de 5 segundos) o cuando este valor supera los 300 segundos (si ha pasado un día completo). Este método es el más eficiente de los anteriores, y no falla nunca...

... Excepto en un periodo de 5 minutos. Imaginemos que el partido empieza a jugarse a las 14:00. Entonces acabaría a los 14:05. El tiempo se haría negativo cuando, por ejemplo, el reloj marca las 14:06, y se haría un valor muy grande cuando pasa un día completo (son las 1:00 de la noche, faltan 13 horas 5 minutos = 785 minutos para que acabe de "prepararse"). Pero cuando el reloj marque de nuevo las 14:00 (del día siguiente), el servidor seguirá offline, pero como quedarán 5 minutos de nuevo DISO dará un falso positivo.

Puede parecer un periodo insignificante, y lo es, excepto para algunos casos. Si el servidor se ejecuta regularmente a una hora determinada, y un día no se enciende por un error o por vacaciones, los clientes creerán que el servidor está online pero no es cierto. Además, en un futuro se podrá ajustar el tiempo de espera de simulación, por lo que si esta espera es muy grande, este margen de error se hace muy grande.

Es necesario, entonces, encontrar un nuevo método.

Detección Inteligente de Servidor Offline Avanzado (DISOA)

!.jpg
Esta función/característica aún no se ha empezado a desarrollar y está planeado desarrollarla en un futuro.

DISOA es un método no implementado aún, pero está planeado desarrollarlo para la próxima versión.

Es un cambio tanto en servidor/cliente/base de datos, por lo que las ligas creadas anteriormente a esta versión no serán compatibles. Lo que hace DISOA es lo siguiente:

El servidor cada vez que realiza un cambio (preparación->juego, simulación de partido...) guarda la fecha cuando hizo el cambio en la base de datos. DISOA comprueba si la fecha actual no supera los 300 segundos, y si lo hace, detecta el servidor como "Offline".

Es el método más efectivo, rápido y seguro, con el inconveniente de que haya que crear una nueva Liga o adaptarla manualmente.

Probablemente se añada un margen de algunos segundos, por la diferente hora de cada ordenador.

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar