Как выполнить ping в JavaScript или jQuery?
Я хочу создать игровой пинг в 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
?
Ответы
Ответ 1
более низкое время ответа связано с тем, что по умолчанию для свойства cache
установлено значение true, установите его на false
, чтобы каждый раз, когда он перешел на сервер, а не в кеш
var ping = new Date;
$.ajax({ type: "POST",
url: "server.php",
data: {....},
cache:false,
success: function(output){
ping = new Date - ping;
}
});
Ответ 2
Вы не сможете вычислить точную задержку на стороне клиента (не считая java, flash или websockets), вам нужен сервер, чтобы вычислить его и вернуть значение в ответе. Получение чего-либо, кроме 0ms
для локального хоста, должно быть достаточным доказательством этого: 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