Я пытаюсь реализовать покерный сервер. Http-сервер перенаправляет пакеты данных на внутренние серверы, которые обрабатывают состояние всех покерных рук. В любой руке игрок получает 10 секунд на действия (ставка, сброс, колл, рейз и т. Д.). Если в течение 10 секунд ответа нет, сервер автоматически их отбрасывает. Чтобы проверить, что прошло 10 секунд, поддерживается список событий, когда действия должны быть получены. Это приоритетная очередь, упорядоченная по времени, и каждая играемая рука для покера имеет запись в приоритетной очереди.
Рассмотрим следующий сценарий, поскольку последнее действие проходит за 9,99 секунды до того, как на http-сервер поступит следующее действие. К тому времени, когда действие пересылается на внутренние серверы, проходит дополнительное время, так что теперь прошло в общей сложности 10,1 секунды. Внутренние серверы объявят сложенную руку, но я хотел бы, чтобы действие было обработано, поскольку технически оно поступило на http-сервер через 9,99 секунды. Теперь одним из решений было бы подождать, пока бэкэнды подождут некоторое время, прежде чем объявить сложенную руку, чтобы увидеть, наступит ли действие с отметкой времени в 9,99 секунды. Но это приведет к задержке, когда следующий человек в руке начнет действовать.
Цели, которые я хотел бы получить,
- Обрабатывать действия, достигающие http-сервера за 9,99 секунды, а не сбрасывать их руку.
- Агрессивно минимизируйте задержку, возникающую из-за необходимости ожидания на холостом ходу, чтобы «решить» проблему, упомянутую в п. 1. 1. 1010 *
Какие существуют различные решения? Специалистам в области распределенных систем известна литература о компромиссах между различными решениями. Я хотел бы знать различные решения, которые считаются приемлемыми в литературе по распределенным системам. Это не просто специальное решение.