Как запоминать последний визит пользователя?

Всем привет. Подскажите, какой-то хороший и быстрый способ, чтобы отображать на сайте или в приложении, что пользователь онлайн?
У меня приложение android и iphone. Я на каждый запрос пользователя, делал запрос в БД, где сохранял время последнего визита. Но потом понял, что обновлять записи в таблицах, это времязатратно. Обновление происходит за 15мс, что в масштабах всего запроса, сильно долго, ведь все get запросы выполняются гораздо быстрее в итоге весь скрипт отрабатывает за 7мс, а запрос на обновление визита, аж 15-20мс. Итого 22-27мс, вместо 7. И так на каждый запрос.
Была идея хранить где-то в redis, но тогда, после получении пользователя из бд, нужно еще лезть в redis, в общем вариантов больше нет
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rPman
Судя по всему проблема кроется не в записи в базу данных, а в том, когда и как часто вы это делаете.

Неправильный подход - клиентское приложение периодически по таймеру делает запрос к серверу, время последнего запроса пишется в базу.

Правильный подход - клиентское приложение открывает и держит открытым сетевое соединение (websocket например, все браузеры поддерживают, ну а приложения могут сами ниже уровнем tcp использовать), в этом случае приложению так или иначе придется отсылать в это подключение ping пакет (keep alive таймаут) но в этом случае закрытие приложение пользователем будет отловлено в тот же миг по закрытию сетевого подключения, т.е. в базу данных на сервере не нужно ничего писать, бакэнд сможет по списку открытых подключений все сказать сам.

Да, если у пользователя смартфон - то в момент ухода в сон или из-за проблем с сетью (смена базовой станции при движении или просто рукожопство ОпСоС-ов) соединение тоже может закрыться или наоборот подвиснуть и в пределах таймаута выдавать неверную информацию (т.е. человек приложение закрыл а сервер это не отловил) но окно ошибки в этом случае будет тот же таймаут, что был бы в первом неправильном способе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Лучшие люди Иваново
от 40 000 до 90 000 руб.
Алгоритмика Москва
от 110 000 до 160 000 руб.
N1.RU Новосибирск
от 100 000 руб.