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

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

Решение 1: Хранение игры в Redis Храните состояние игры в Redis на случай возвращения одного из игроков. Когда игрок снова войдет в игру, проверьте состояние. Если время не истекло, продолжите игру, если истекло - автоматически завершите ее.

Решение 2: Таймер через Celery Создайте задание Celery, которое запускает таймер, когда оба игрока уходят. Если ни один из игроков не возвращается в течение заданного времени, игра автоматически считается законченной, и результат записывается.

Я был бы признателен за любые рекомендации по более эффективному решению этой проблемы и хотел бы узнать, как такие ситуации обычно решаются в производственных средах.

Гибридное решение

Вы также можете следовать решению hybird, комбинируя оба решения.

Вы можете хранить состояние игры в Redis и запланировать задачу Celery, когда оба игрока уходят, чтобы обработать таймер и финализацию. Когда игрок снова присоединяется, вы можете проверить состояние в Redis и отменить задачу Celery, если игра должна возобновиться.

Детерминированное решение

Вы также можете использовать детерминированный подход, чтобы решить, когда игра должна закончиться. Например, храните в Redis временную метку последнего действия. Когда один из игроков попытается возобновить игру, проверьте, превышает ли текущее время таймаут. Если да, завершите игру и очистите состояние.

Обратите внимание, что Redis имеет TTL, но не выполняет уведомление. Поэтому, если вам требуется уведомление, вам нужен Celery, который позаботится об этом.

Вернуться на верх