Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Не работает блокировка для большого количества запросов

#javascript #mysql #алгоритм #nodejs


Здравствуйте. Дело в том, что я использую сокеты. И почти в одно и то же время, допустим,
в 20 часов и 0 минут, у всех пользователей скрипт отправляет запрос на сокет сервер.
Отправляя этот запрос, у меня есть цель: выполнить нужное мне событие (1.1) один раз,
и вернуть всем результаты. Но у меня не совсем получается.

Я делаю так: когда приходит запрос от пользователя я проверяю, был ли запрос раньше,
и если не было, помечаю в базе, что запрос только что произошел. Дальше, если еще кто-то
шлет запрос, то уже видно, что запрос уже произошел, и текущий клиент ждет выполнения
нужного мне события (1.1). Проблема состоит в том, что иногда Node.JS не успевает выполнить
запрос к базе, и за это время, пока идёт запрос, успевает "проскочить" несколько клиентов
и нужно мне события (1.1) выполняется столько раз, сколько пользователей проскочило,
плюс тот пользователь, что инициировал первый запрос. 

Как быть? Может есть какой-то алгоритм? Уже голову сломал.
    


Ответы

Ответ 1



Как вариант, можно использовать именнованые локи MySQL SELECT GET_LOCK('lock_name', 60); Документация

Комментариев нет:

Отправить комментарий