знаю, что пользователь тот, за кого себя выдает, я проверил это единожды на этапе открытия сокет-соединения. Но дальше мне нужно проверять, а может ли он эмитить те или иные события.
Предполагается, что он может эмитить 1000+ событий в минуту. Мне вот что-то кажется, что обращаться в бд по 1000 раз в минуту для проверки прав одного пользователя немного странно, так ведь?
Значит мне, видимо, нужно закэшировать на сервере его права при открытии сокет-соединения, а при закрытии кэш очищать. Но что если я (как администратор, например) внезапно заблокирую этого пользователя, отзову его права или произойдёт что-то этакое? Получается, что будет размолвка между состоянием бд и кэшем.
Тогда я могу при изменении его прав юзать условный семафор для блокировки доступа к кэшу (чтоб сокет не взял неактуальную информацию), и обновлять этот кэш.
Так вот: я вообще мыслю в верном направлении и я правильно описал алгоритм необходимых действий, или же это всё фулл бред, и мне надо решать это совершенно иначе?
Если я мыслю верно, то подойдет обычный node-cache или надо смотреть на страшные memcached и прч.? Как вы вообще решаете подобные кейсы?
Ужас, убирай прямые записи в БД с ивентов, посылаемых клиентов!
Приведи пример, что хочешь реализовать, никто не знает ведь, что ты хочешь кэшировать, а что нет
Обсуждают сегодня