Как сделать ненавязчивые уведомления о новых сообщениях в мессенджере?
Всем привет!
В проекте есть встроенный мессенджер для юзеров и стоит задача рассылки уведомлений о непрочитанных сообщениях из мессенджера.
Что-то пока на ум ничего годного не пришло. Задача стоит не слать пачками email уведомления на каждое непрочитанное сообщение.
Напрашивается отсчет времени с момента прибытия сообщения, если оно не прочитано за 5 минут, например, то уходит email оповещение. Но каждое сообщение нагружать такой проверкой не есть гуд. Получается, нужно делать проверку только если пользователь не онлайн. Но, каждое новое сообщение тоже слать не очень хочется, т.е. нужно где-то записать, что сообщение уже было отправлено. Если представить, что эта вся гора будет работать одновременно на несколько тысяч юзеров, то вышеописанная идея мне как-то не нравится.
В общем, нуждаюсь в вашем совете, коллеги.
При открытии окна со списком сообщений ставить таймут на запуск через 15-30 секунд javascript-функции, которая получит из этого окна список всех сообщений с меткой "непрочитано", отправит ajax'ом список их идентификаторов специальной вьюхе и в случае положительного ответа поставит им отметку "прочитано". Вьюха на серваке получается предельно быстрая - всего-то надо сделать пакетное обновление по списку первичных ключей. И нужно написать management command запускаемую кроном раз в 10 минут, выгребающую из базы все сообщения старше 10 минут с меткой "непрочитано" и отправляющую письмо "У вас есть непрочитанные сообщения". Причём после отправки надо где-нибудь поставить метку, что пользователю такому-то тогда-то было отправлено уведомление, и не отправлять новых до тех пор, пока пользователь не прочитает хоть одно сообщение.
Сложна) Ну лучше чем мой вариант. Вот этот момент конечно все портит:
Причём после отправки надо где-нибудь поставить метку, что пользователю такому-то тогда-то было отправлено уведомление, и не отправлять новых до тех пор, пока пользователь не прочитает хоть одно сообщение.
Буду делать, может в процессе придет решение более элегантное. Спасибо!