Как пинговать в JavaScript или JQuery? - PullRequest
10 голосов
/ 22 января 2012

Я хочу создать игровой пинг в Javascript, например, игру Counter Strike.Я делаю AJAX-вызов к серверу (MySQL) и хочу рассчитать время, которое у меня занято, но я либо вычисляю его неправильно, либо у меня неверное представление о пинге.Вот код, который у меня есть:

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

Проблема в том, что иногда я получаю 0 мс или 3 мс.Это нормально?Кажется, очень быстро перейти к server.php, подключиться к базе данных, выбрать несколько строк и вернуть некоторые данные.Да, это на локальном хосте, поэтому оно должно быть быстрым, но должно ли оно быть таким быстрым?Должен ли я рассчитывать его на FPS, или просто каждый звонок на server.php?

Ответы [ 2 ]

7 голосов
/ 22 января 2012

меньшее время отклика связано с тем, что по умолчанию для свойства cache установлено значение true, установите для него значение false, чтобы каждый раз, когда оно поступало на сервер, а не в кэш

var ping = new Date;

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

        ping = new Date - ping;

    }
});
2 голосов
/ 22 января 2012

Вы не сможете рассчитать точное время ожидания на стороне клиента (не считая java, flash или websockets), вам нужен сервер, чтобы рассчитать его и вернуть значение в ответе.Получение чего-либо, кроме 0ms для localhost, должно быть достаточным свидетельством этого: P

Самое раннее время в состоянии соединения дает мне 300ms для stackoverflow.com, тогда как действительное число ближе к 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.DONE) заняло 949ms

...