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

标签 javascript node.js random meteor

使用 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/

相关文章:

javascript - Microsoft Bot Framework 请求中的 MissingProperty 错误

css - react MUI : How to make the css grid columns automatically wrap on the next row

javascript - AngularJS:日期输入仅在 Chrome 中显示

javascript - 使用 UpdateHandler 在 Keystone.js 中上传 LocalFile

javascript - Google map Javascript API v3 错误消息 "Key is Disabled"

java - 随机选择字符串后如何从数组中删除字符串? java

python - 在 random.seed( 0 ) 中传递不同数字的用例有哪些

php - 使用 php 从目录中随机选择图像并使用其文件名进行 mysql 查询

javascript - 从 Backbone.View 中的集合中删除单个模型

javascript - 过滤动态创建的表行(Jquery)