Задать вопрос
@hatealleverything

Как реализовать онлайн на сайте ExpressJS?

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

Накидал это всё в middleware
router.use(function(req, res, next) {
    var lasttime = Date.now();
    if (lasttime !== null) {
        timenow = lasttime + 30000
        var usersonline = 0
        usersonline = usersonline + 1

// Здесь я запутался окончательно и так и не понял правильно ли я сравнивал в if

        if (timenow < lasttime) {
            console.log('Пользователь вышел')
        }
    }
    console.log('lasttime  = ' + lasttime)
    console.log('timenow  = ' + timenow)
    console.log('usersonline  = ' + usersonline)
    next()
})


По итогу, я не понял, как middleware может делать что-то без запроса. Его нужно заменить, но я не понимаю, на что его можно заменить
  • Вопрос задан
  • 96 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@McBernar
Либо сокеты, либо создаете временного пользователя, ставите ему таймер, при любом действии на сайте таймер обновляется, если бездействует больше минуты — удаляем. Очевидно, тут придется, во-первых, этих юзеров куда-то складывать, а, во-вторых, как-то проверять время жизни. Лучше сокеты.

А вообще, есть еще возможность обращаться из роутов/мидлов к глобальным объектам. Будут висеть в памяти, пока приложение не перезапустите. Так что, это может самым простым решением.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы