Я пытаюсь создать небольшое веб-приложение, которое позволяет пользователю «входить» и «выходить из системы».В настоящее время у меня проблема с тем, чтобы позволить клиенту отправлять на сервер постоянные «сердцебиения» или сообщения для уведомления о том, что он все еще активен.
Это более логичный вопрос.Я хочу сделать в php цикл while (1), который проверяет, пропущено ли n тактов.Я по-прежнему хочу, чтобы клиент и сервер могли взаимодействовать во время этого цикла (по сути, я хочу, чтобы сервер вел себя так, как если бы у него был отдельный поток "check_for_heartbeats".
Как это сделать с помощью php«Я запускаю XAMPP на данный момент. Любая помощь будет высоко ценится.
Редактировать: Чтобы уточнить, что я хочу сделать, это иметь возможность перехватить событие закрытия браузера даже в тех случаях, когда событие window.unloadне срабатывает (например, клиент отключается от интернета). В этом случае наличие потока для отслеживания пульса представляется наиболее интуитивным решением, хотя я не уверен, как это сделать в php.
Редактировать 2: isLoggedIn () - это просто вспомогательная функция, которая проверяет, установлена ли логическая переменная сеанса ($ _SESSION ['is_logged_in')).
Редактировать финал: ХорошоТеперь я точно понимаю, что говорят комментарии и ответы.Итак, перефразируя, вот потенциальное решение: имейте код Javascript для отправки «сердцебиений» на сервер.Сервер добавит метку времени, связанную с этими битами.Измените базу данных так, чтобы она содержала эти временные метки. Выполните запрос всей таблицы «временных меток» (более вероятно, таблицы «пользователей» с атрибутом «временной метки») и посмотрите, больше ли разница между NOW и последней временной меткой, чем некоторое пороговое значение.«Выйдите из системы», если все пользователи превысили этот порог.
Единственная проблема заключается в том, что в систему вошел только один пользователь или все пользователи теряют соединение одновременно, но в этих случаях больше никого не будет.чтобы увидеть, что пользователь потерял соединение.
Это комбинация нескольких ответов, но я думаю, что ответ Криса решает большую часть проблемы.Спасибо Крису и Алексу Луниксу за полезный вклад.: D
Вот фрагмент кода для лучшего объяснения
Сторона сервера:
function checkBeats()
{
while(isLoggedIn())
{
// it's been > 30 secs since last heartbeat
if((time() - $_SESSION['heartbeat']) > 30)
{
logout();
break;
}
}
}