gpt4 book ai didi

javascript - 在 Meteor 中在客户端和服务器上生成相同的随机数

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:08 25 4
gpt4 key购买 nike

使用 Meteor,我需要一种方法在客户端和服务器上生成相同的随机数,这样我就可以获得客户端方法的延迟补偿的好处。

我注意到 Meteor 有一个随机包:http://docs.meteor.com/#random

我不熟悉随机数生成或密码学,而且我不太了解 Random 包的一些 Meteor 文档,所以我有一些问题。

  1. 我可以使用这个包来实现我想要的吗?
  2. 如果是,我该如何使用它来做到这一点?如果我在客户端上使用种子来生成随机数,然后将该种子发送到服务器以重新生成相同的数字,那么这不是隐含的不安全的方式吗...因为客户端不可信?
  3. 如果没有,还有其他方法可以实现这一目标吗?

我的问题定义步骤...

  1. 客户端:生成种子
  2. 客户端:从种子生成随机数
  3. 客户端:将种子发送到服务器
  4. 服务器:从种子生成随机数
  5. 失败...客户端生成的种子可以被偷看并且可以被操纵

替代方案:

  1. 客户端:向服务器请求随机数
  2. 服务器:生成随机数
  3. 服务器:向客户端发送随机数
  4. 失败...往返意味着您无法利用 Meteor 的延迟补偿

我的应用需要重复生成大量随机数,因此我试图避免所有这些往返。

最佳答案

这取决于你想要实现什么样的事情,如果我们以MMO中的老虎机为例,一步一步完成的事情是这样的:

  1. 用户点击“插入硬币”按钮
  2. 服务器收到用户支付一场比赛的通知,比赛结果发送给客户端
  3. 客户端等待用户旋转机器并开始滚动
  4. 客户端显示在等待用户操作 + 动画时收到的结果。

这有一个副作用:用户在开始转动轮子之前、但在付费之后就可以知道结果。

问题是,如果用户在选择随机数后有不同的选项可供选择,那么如果他发现该数字不好,他可以选择成本最低的选项。为了解决这个问题,每个随机操作都需要创建自己的编号。

您可以看到一个用户详细描述了这个模式,他查看了游戏的源代码,发现自己被游戏“欺骗”了:Zoot Loot is Not Random

在一款名为 Clickerheroes 的 Flash 游戏中,有些 Action 会产生随机结果。由于游戏每几分钟保存一次,并且没有服务器支持,因此随机数是提前生成的。这可以防止保存、试试你的运气、加载回来、在相同的随机数返回时重试你的运气......

虽然这并不能完全回答OP,但我希望它有助于为用户提供值得信赖的随机数。

关于javascript - 在 Meteor 中在客户端和服务器上生成相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com