Javascript game / Связь с сервером / Проверка ответа - PullRequest
1 голос
/ 30 января 2010

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

Проблема заключается в задержке между двумя последовательными вопросами из-за проверки на сервере. Вопросы не зависят друг от друга (результат не меняет следующий вопрос). Я хочу, чтобы пользователь получил отзыв сразу после его ответа и только потом увидел следующий вопрос.

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

Единственное и очевидное решение, которое я могу придумать для устранения задержки, - это отправить клиенту пакет вопросов вместе с ответами и выполнить проверку на стороне клиента. Это сведет к минимуму связь с сервером (один раз за сеанс) и обеспечит бесперебойную игру. Очевидно, что любой пользователь, который может читать входящие сообщения, может создать сценарий, который будет воспроизводиться автоматически и воспроизводиться идеально. Запутывание клиентского кода и ответа может немного помочь и увеличить стоимость написания такого вредоносного скрипта, но это не устранит решительного пользователя для создания его собственного скрипта.

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

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

Ответы [ 2 ]

1 голос
/ 30 января 2010

В качестве разминки я хочу дать одно схематичное решение, которое приходит мне в голову.

Время от времени включайте в свой пакет неправильную комбинацию вопрос-ответ. Вы можете обнаружить автоматического бота, потому что он должен давать «правильный» (который на самом деле неправильный) ответ чаще, чем реальные игроки (плюс не должно быть существенной разницы между точностью других вопросов и этими поддельными вопросами). Цена состоит в том, что реальные игроки увидят, что их законные ответы время от времени считаются неправильными. Если вы уменьшите количество таких поддельных вопросов, вы жертвуете точностью обнаружения ботов.

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

0 голосов
/ 30 января 2010

Невозможно выполнить то, что вы пытаетесь сделать, используя только Javascript. Подумайте об этом: если Javascript, открытый текст, язык на стороне клиента, выполняет проверку, ничто не мешает игроку делать то же, что делал бы Javascript, и получать правильные ответы.

Чтобы свести к минимуму злоупотребления, вы можете запутать Javascript и предоставить клиенту ответы в хэш-форме (md5 / sha1 / etc), хешировать ответ, отправленный пользователем, и затем проверить его по хешу. Таким образом, ответы не отображаются в виде открытого текста, но если ваша игра имеет ограниченные ответы с несколькими вариантами ответов, для мошенника было бы тривиально просто хешировать их все и сравнить с пакетом ответов.

Как долго мы говорим здесь? Ajax работает довольно быстро ... Я видел некоторые приложения с временем отклика в диапазоне 100-200 мс. Это должно быть достаточно низким, чтобы не нарушать пользовательский опыт. Если у вас время отклика меньше, чем это, лучше всего подумать, как оптимизировать серверную часть приложения для более быстрого вычисления ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...