Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript游戏/服务器通信/答案验证_Javascript_Ajax - Fatal编程技术网

Javascript游戏/服务器通信/答案验证

Javascript游戏/服务器通信/答案验证,javascript,ajax,Javascript,Ajax,我有一个类似javascript游戏的小测验,它应该是快节奏的。用户需要在短时间内回答尽可能多的问题。他会收到一个“是/否”问题,答案会发送到服务器,在那里进行验证,并向他显示反馈(正确/不正确)。我使用Javascript和AJAX 问题在于,由于服务器上正在进行验证,两个连续问题之间出现延迟。这些问题相互独立(结果不会改变下一个问题)。我希望用户在回答后立即得到反馈,然后才能看到下一个问题 目前,在服务器端验证答案时,我在客户端停止时钟,并在反馈和下一个问题到达时恢复时钟。我还确保,在服务器

我有一个类似javascript游戏的小测验,它应该是快节奏的。用户需要在短时间内回答尽可能多的问题。他会收到一个“是/否”问题,答案会发送到服务器,在那里进行验证,并向他显示反馈(正确/不正确)。我使用Javascript和AJAX

问题在于,由于服务器上正在进行验证,两个连续问题之间出现延迟。这些问题相互独立(结果不会改变下一个问题)。我希望用户在回答后立即得到反馈,然后才能看到下一个问题

目前,在服务器端验证答案时,我在客户端停止时钟,并在反馈和下一个问题到达时恢复时钟。我还确保,在服务器端,游戏会话不会超过允许的时间加上合理的网络延迟时间

我能想到的消除延迟的唯一明显的解决方案是向客户发送一批问题以及答案,并在客户端进行验证。这将最大限度地减少与服务器的通信(每个会话一次),并提供流畅的播放体验。显然,任何能够阅读传入消息的用户都可以创建一个脚本,该脚本将自动播放并完美播放。混淆客户端代码和答案可能会有所帮助,并增加编写此类恶意脚本的成本,但这并不能消除用户创建自己脚本的决心

我的问题有两个方面。首先,我想确保我没有犯下巨大的错误,没有错过一个明显的解决方案,这个解决方案也可以完美地处理恶意用户。我想理论上不可能想出这样的解决方案,但我没有足够的地方在这里写下证据(!)


第二,考虑到在游戏结束时没有金钱奖励,我不希望任何无聊的程序员干扰我的小游戏。不过,我还是想听听您的意见和策略,以便在更严重的情况下处理这一问题。

作为热身活动,我想给出一个我想到的粗略解决方案

偶尔在你的批次中加入一个错误的问答组合。您可以检测自动机器人,因为它应该比真实玩家更频繁地给出“正确”(事实上是错误的)答案(此外,其他问题的准确性与这些虚假问题之间不应有任何显著差异)。代价是,真正的玩家偶尔会发现他们的合法答案被认为是错误的。如果你减少这些虚假问题的数量,你就牺牲了机器人检测的准确性


我假设脚本在后续答案之间的时间安排上表现得像人类,并且它们足够聪明,不会每次都给出正确的答案。否则就太容易了。

作为热身,我想给出一个我脑海中浮现的粗略解决方案

偶尔在你的批次中加入一个错误的问答组合。您可以检测自动机器人,因为它应该比真实玩家更频繁地给出“正确”(事实上是错误的)答案(此外,其他问题的准确性与这些虚假问题之间不应有任何显著差异)。代价是,真正的玩家偶尔会发现他们的合法答案被认为是错误的。如果你减少这些虚假问题的数量,你就牺牲了机器人检测的准确性


我假设脚本在后续答案之间的时间安排上表现得像人类,并且它们足够聪明,不会每次都给出正确的答案。否则就太容易了。

仅使用Javascript是不可能实现您想要实现的目标的。想想看:如果Javascript,一种纯文本的客户端语言,正在进行验证,那么没有什么可以阻止玩家做与Javascript相同的事情并获取正确的答案

为了最大限度地减少滥用,您可以混淆Javascript并以散列形式(md5/sha1/etc)向客户端提供答案,对用户提交的答案进行散列,然后根据散列进行验证。这样一来,答案在明文中就不可见了,但如果你的游戏只有有限的多选答案,那么作弊者只需将所有答案进行散列,然后与一批答案进行比较就可以了


我们到底要耽搁多久?Ajax相当快。。。我见过一些响应时间在100-200ms范围内的应用程序。这应该足够低,以免破坏用户体验。如果您的响应时间比这慢,那么最好的办法可能是研究如何优化应用程序的服务器端部分,以更快地计算响应。

仅使用Javascript是不可能实现您想要实现的目标的。想想看:如果Javascript,一种纯文本的客户端语言,正在进行验证,那么没有什么可以阻止玩家做与Javascript相同的事情并获取正确的答案

为了最大限度地减少滥用,您可以混淆Javascript并以散列形式(md5/sha1/etc)向客户端提供答案,对用户提交的答案进行散列,然后根据散列进行验证。这样一来,答案在明文中就不可见了,但如果你的游戏只有有限的多选答案,那么作弊者只需将所有答案进行散列,然后与一批答案进行比较就可以了

我们到底要耽搁多久?Ajax相当快。。。我见过一些响应时间在100-200ms范围内的应用程序。这应该足够低,以免破坏用户体验。如果您的响应时间比这慢,那么最好的办法可能是研究如何优化appl的服务器端部分