Después de una siesta me encontré con que llovía ya se jodió el día dije, encedí mi notebook y entre a una sitio web con "Aula Virtual". y me buse a curiosear...
y encontré lo siguiente.
http://elchusa.com/moodle/message/refresh.php?id=1&name=elchusa.com&wait=1
El contador de espera, que recoge la variable “&wait=”, tiene una peculiar forma de ir aumentando su tasa de refresco, según aumenta a su vez los segundos a la espera.
A su vez el campo “&name=”, rescata el nombre de usuario de la base de datos que contiene mensajes nuevos.
Me llamo la atención, como la variable "&wait=" va en aumento.
&wait=1, &wait=2, &wait=3, &wait=4, &wait=5, &wait=6, &wait=8, &wait=10, &wait=12, &wait=15, &wait=18, &wait=22, &wait=27, &wait=33...
"Tal parece que no sabe sumar mas 1 "
**************************************************************************
if ($wait < 300) { // Until the wait is five minutes$wait = ceil(1.2 * (float)$wait); // Exponential growth
**************************************************************************
Miremos esta línea.
**************************************************************************
$wait = ceil(1.2 * (float)$wait); // Exponential growth
**************************************************************************
$wait = ceil(1.2 * (float)$wait); // Exponential growth
**************************************************************************
La función ceil en php, devuelve el siguiente valor entero mayor, redondeando el valor si es necesario, así que si el resultado es por ejemplo 1,2 aun siendo más lógico redondear al valor menor, se transformaría a ser un 2.
1
1*1,2 = 1,2 ->2
2*1,2 = 2,4 ->3
3*1,2 = 3,6 ->4
4*1,2 = 4,8 ->5
5*1,2 = 6 ->6
6*1,2 = 7,2 ->8
8*1,2 = 9,6 ->10
10*1,2 = 12 -> 12
12*1,2 = 14,4 ->15
15*1,2 = 18 -> 18
18*1,2 = 21,6 -> 22
22*1,2 =26,4 -> 27
27*1,2 = 32,4 -> 33
33...
Asta ahí todo va bién.
¿Pero que número es el único que multiplicado por 1,2 consiga un comportamiento anómalo?
0
0*1,2 = 0 -> 0 (Cada cero segundos repite su ejecución) Cero por cualquier número es igual a cero.
El redondeo lleva a un número entero mayor que -1 y menor que 1, del cual no se puede esperar una tasa de refresco con incremento, así que las peticiones que este conlleva al servidor, se ahogan en continuos e infinitos GET.
Seguro más de un administrador, se volvería loco al ver tantas peticiones desde su localhost, siendo estas invocadas por el archivo refresh.php












