У меня есть игра типа javascript, похожая на викторину, и она должна быть динамичной. Пользователь должен ответить на как можно больше вопросов за короткое время. Ему задают вопрос «Да / Нет», ответ отправляется на сервер, подтверждается там, и ему возвращается обратная связь (правильная / неправильная). Я использую Javascript и AJAX.
Проблема заключается в задержке между двумя последовательными вопросами из-за проверки на сервере. Вопросы не зависят друг от друга (результат не меняет следующий вопрос). Я хочу, чтобы пользователь получил отзыв сразу после его ответа и только потом увидел следующий вопрос.
В настоящее время я останавливаю часы на стороне клиента, в то время как ответ проверяется на стороне сервера, и возобновляю их, когда приходит ответ вместе со следующим вопросом. Я также удостоверяюсь, что на стороне сервера сеанс игры не превышает разрешенного времени плюс разумная задержка для сетевых задержек.
Единственное и очевидное решение, которое я могу придумать для устранения задержки, - это отправить клиенту пакет вопросов вместе с ответами и выполнить проверку на стороне клиента. Это сведет к минимуму связь с сервером (один раз за сеанс) и обеспечит бесперебойную игру. Очевидно, что любой пользователь, который может читать входящие сообщения, может создать сценарий, который будет воспроизводиться автоматически и воспроизводиться идеально. Запутывание клиентского кода и ответа может немного помочь и увеличить стоимость написания такого вредоносного скрипта, но это не устранит решительного пользователя для создания его собственного скрипта.
Мой вопрос двоякий. Во-первых, я хочу быть уверенным, что я не делаю огромную ошибку и не пропускаю очевидное решение этой проблемы, которое также отлично справляется с плохими намерениями пользователей. Я думаю, что теоретически невозможно придумать такое решение, но у меня нет достаточно места, чтобы записать доказательство здесь (!).
Во-вторых, учитывая, что в конце игры денежного вознаграждения нет, я не ожидаю, что скучающие программисты будут возиться с моей маленькой игрой. Но тем не менее, я хотел бы услышать ваше мнение и ваши стратегии по борьбе с ним в более серьезных случаях.