2012-01-22 54 views
10

Quiero crear un ping similar al juego en Javascript, al igual que el juego Counter Strike, por ejemplo. Estoy haciendo una llamada AJAX al servidor (MySQL) y quiero calcular el tiempo que se tarda, pero estoy calculando mal o tengo una idea equivocada de hacer ping. Aquí está el código que tengo hasta ahora:¿Cómo hacer ping en JavaScript o jQuery?

var time_stamp = new Date; 

$.ajax({ type: "POST", 
    url: "server.php", 
    data: {....}, 
    success: function(output){ 

     ping = new Date - time_stamp; 

    } 
}); // btw, this code works fine now for ping 

El problema es que a veces obtengo 0ms o 3ms. ¿Esta bien? Parece muy rápido ir al server.php, conectarse a la base de datos, seleccionar algunas filas y devolver algunos datos. Sí, esto está en el host local, por lo que debería ser rápido, pero ¿debe ser tan rápido? ¿Debería calcularlo en FPS o simplemente llamar al server.php?

+0

supongo que está bien. Intente obtener un resultado de 'server.php', si responde bien, está bien :) si usa Chrome o Firebug, eche un vistazo al tiempo de solicitud de un jax. –

+1

Asegúrese de que el servidor web esté enviando encabezados en server.php para evitar el almacenamiento en caché. –

+0

Gracias por la ayuda. Investigué y Chrome me está dando 1ms más bajo que mis cálculos, lo cual está bien. – Kivylius

Respuesta

7

el tiempo de respuesta inferior es porque por defecto la propiedad cache se establece en true, configurarlo para que false de modo que cada vez que pasa a no el servidor de la caché

var ping = new Date; 

$.ajax({ type: "POST", 
    url: "server.php", 
    data: {....}, 
    cache:false, 
    success: function(output){ 

     ping = new Date - ping; 

    } 
}); 
2

Usted no será capaz de calcular latencia precisa en el lado del cliente (sin contar java, flash o websockets), necesita que el servidor lo calcule y devuelva el valor en una respuesta. Conseguir que no sea 0ms para localhost nada debería ser suficiente evidencia de esto: P

La primera vez en mi estado de conexión 300ms recibe por stackoverflow.com, mientras que el número real se acerca a 100ms.

var a = new XMLHttpRequest(); 

a.onreadystatechange = function() { 

    if (a.readyState === a.HEADERS_RECEIVED) { 
     a.abort(); 
     console.log(new Date - abc); 
    } 
}; 

var abc = new Date; 

a.open("GET", "/"); 
a.send(null); 

A la espera de la respuesta completa (a.DONE) tomó 949ms

Cuestiones relacionadas