be_a_dancer
@be_a_dancer
Backend/Fullstack Developer

Каким образом можно обеспечить aCid при условии одновременного запроса нескольких пользователей?

В общем-то вопрос прост: каким образом я обеспечиваю согласованность операций при условии, что множество клиентов может обратиться с запросом к базе данных?

Теперь подробнее. У меня есть некий абстрактный раунд игры. Клиенты получают информацию об игре посредством Polling (Ajax запросов). В момент, когда игра заканчивается, возникает ситуация, что одновременно множество клиентов обращается к серверу с просьбой открыть новый раунд. Новый раунд - новая запись в базе данных.
Логика моего кода проста: я делаю запрос к базе на извлечение. Если нет записей, я делаю запрос на вставку нового раунда.
Потенциальная проблема: множество клиентов одномоментно обращаются к серверу, сервер обрабатывает множество входящих соединений (apache + php), каждый из них может потенциально создать свою комнату и эту ситуацию нужно как-либо обойти. Можно, пожалуйста, советы?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
IvanCher
@IvanCher
Мысли шире
Сделай прокладку, через которую пользователи будут стучаться.
Т.е. примерно по такому алгоритму:
  1. Закончился раунд, все из группы А начинают стучаться в контроллер Х
  2. Контроллер Х создает блокировку для группы А и создает новый раунд только для первого достучавшегося пользователя
  3. Другие пользователи группы А получают ответ, что кто-то уже создает новый раунд
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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