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

21 Авг 2019 в 06:29
224 +1
0
Ответы
1

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

Вы можете создать глобальный семафор или мьютекс, который будет блокировать доступ к выполнению события (1.1) и разблокировать его только после выполнения этого события. Таким образом, при поступлении новых запросов на выполнение события (1.1), они будут ожидать, пока текущий запрос не будет выполнен.

Примерно таким образом это можно реализовать:

При получении запроса от пользователя проверяем состояние семафора/мьютекса.Если блокировка активна, то ждем разблокировки и добавляем текущий запрос в очередь.Если блокировка не активна, то блокируем ее, выполняем событие (1.1) и разблокируем после завершения.После разблокировки проверяем очередь запросов и выполняем их поочередно.

Таким образом, вы сможете гарантировать, что событие (1.1) будет выполнено только один раз и все запросы будут обработаны в правильном порядке.

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 989 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир