2012-01-22 5 views
10

Voglio creare un ping simile a un gioco in Javascript, proprio come il gioco Counter Strike, per esempio. Sto facendo una chiamata AJAX al server (MySQL) e voglio calcolare il tempo impiegato, ma lo sto calcolando male o ho un'idea sbagliata del ping. Ecco il codice che ho finora:Come eseguire il ping in 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 

Il problema è che a volte ottengo 0 ms o 3 ms. Va bene? Sembra molto veloce andare a server.php, connettersi al database, selezionare alcune righe e restituire alcuni dati. Sì, questo è su localhost, quindi dovrebbe essere veloce, ma è pensato per essere così veloce? Dovrei calcolarlo su FPS o semplicemente su ogni chiamata a server.php?

+0

Credo che sia giusto. Prova a ottenere un output da 'server.php', se risponde ok, va bene :) se usi Chrome o Firebug, dai un'occhiata a una richiesta di tempo. –

+1

Assicurarsi che il server Web stia inviando le intestazioni su server.php per impedire la memorizzazione nella cache. –

+0

Grazie per l'aiuto. Ho studiato e Chrome mi sta dando 1 ms più basso dei miei calcoli, che è ok. – Kivylius

risposta

7

il tempo di risposta inferiore è perché per impostazione predefinita la proprietà cache è impostata su true, impostarlo su false in modo che ogni volta che va al non server di cache

var ping = new Date; 

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

     ping = new Date - ping; 

    } 
}); 
2

Non sarà in grado di calcolare latenza accurata sul lato client (senza contare java, flash o websockets), è necessario che il server lo calcoli e restituisca il valore in una risposta. Ottenere qualcosa di diverso 0ms per localhost dovrebbe essere sufficiente la prova di questo: P

La prima volta in stato di connessione mi 300ms ottiene per stackoverflow.com, mentre il numero reale è più vicino 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); 

Attesa per la risposta completa (a.DONE) ha preso 949ms