Я разрабатываю функциональность, похожую на аукцион, используя jQuery, AJAX, PHP и mySQL.Неужели результаты AJAX не синхронизированы и вызывают несоответствие результатов опроса?
Ajax каждый раз получает доступ к серверу, чтобы получить самую последнюю ставку, и во время этого звонка мы также получаем оставшееся время с сервера, чтобы синхронизировать всех участников.
У меня есть две проблемы:
1) Время от времени времени, оставшихся мерцают возвращается к значению предыдущего времени на долю секунды. Может ли это связано с тем, что асинхронные результаты выходят из синхронизации?
Отрывки соответствующего кода:
function dotimer() {
updateScreen();
setTimeout('dotimer()',1000);
}
function updateScreen(){
$.ajax({
type : 'POST',
url : 'getinfo.php',
dataType : 'json',
data: { /* various params are passed to php */ },
success : function(data){
/* other info processed here...*/
$("#countdowntimer").html(data.secondsremaining);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {}
});
}
getinfo.php:
$return['secondsremaining'] = strtotime($end_time)-strtotime("now");
/* get other infor from database... */
echo json_encode($return);
(. SetTimeout и setInterval оба имели те же результаты)
2) Является ли доступ к базе данных каждый вторая чрезмерная? Я не вижу альтернативы, чтобы обеспечить актуальность информации. Есть лучший способ сделать это? Аукцион проводится в течение относительно короткого периода времени (30 минут), и мы не ожидаем более 10 участников.
Любые советы/предложения приветствуются, спасибо!
Спасибо за ваш ответ @woozy. Как вы предлагаете это делать? Будет ли синхронизация запросов не заставлять страницу ждать завершения каждого запроса, прежде чем позволить пользователю взаимодействовать с ней? Мы не хотим, чтобы пользователь поставил ставку, когда страница взаимодействует с сервером, - они не должны знать, что это даже происходит. – FluffyKitten
Синхронизация запросов не влияет на взаимодействие страниц при запуске в фоновом режиме. Я предлагаю вам попробовать запустить новый запрос по каждому обратному запросу запроса, а не запускать его каждую секунду. – woozy
Извините, мне сказали, что использование SJAX будет иметь такой эффект, поэтому я даже не рассматривал синхронные запросы. Каков наилучший способ сделать это - вызовите setTimeout в функциях успешного и обратного вызова ошибок? Это также потребует изменения в логике процесса. Поскольку мы делали звонки в секунду, мы также решили вернуть серверное время. Теперь таймер больше не будет отсчитывать каждую секунду, поэтому мне понадобится отдельный таймер обратного отсчета, и вам придется синхронизировать его с временем сервера, поскольку обратный отсчет js не является точным. Крайне важно, чтобы все участники были как можно более синхронными. – FluffyKitten