Javascript 在Meteor中的客户端和服务器上生成相同的随机数
使用Meteor,我需要一种方法在客户端和服务器上生成相同的随机数,这样我就可以从客户端方法的延迟补偿中获益 我注意到Meteor有一个随机包: 我不熟悉随机数生成或晶体摄影,也不太了解随机软件包的一些Meteor文档,所以我有一些问题Javascript 在Meteor中的客户端和服务器上生成相同的随机数,javascript,node.js,random,meteor,Javascript,Node.js,Random,Meteor,使用Meteor,我需要一种方法在客户端和服务器上生成相同的随机数,这样我就可以从客户端方法的延迟补偿中获益 我注意到Meteor有一个随机包: 我不熟悉随机数生成或晶体摄影,也不太了解随机软件包的一些Meteor文档,所以我有一些问题 我可以用这个软件包来实现我想要的吗 如果是,我如何使用它来实现这一点?如果我在客户端使用一个种子来生成随机数,然后将该种子发送到服务器以重新生成相同的数,那么这不是一种隐含的不安全的方法吗。。。因为客户不可信 如果没有,是否有其他方法来实现这一点 我的问题分步定
我的应用程序需要重复生成大量随机数,因此我正在尝试避免所有这些往返。你不能在Math.random中播种(你真正想做的!),我认为随机软件包也不支持它。您可以使用,并在服务器和客户端上使用相同的种子。这取决于您想要实现什么样的目标,如果我们以MMO中的老虎机为例,一步一步完成的是:
虽然这并不完全符合OP的要求,但我希望它有助于为用户提供可靠的随机数据。您试图做的事情本质上是不安全的。如果需要安全性,请呼叫服务器并等待响应。randomiser算法可用,并将种子发送到客户端或服务器,以挫败这种愚蠢的防御尝试
您永远不应该信任来自客户端的数据,当您拥有完全控制权(如服务器)时,请始终验证环境中的所有内容。“我需要一种方法在客户端和服务器上生成相同的随机数”-您需要这样做的事实表明您可能没有正确地解决问题……@MitchWheat您建议我如何解决问题?只需在服务器上生成并将结果发送给客户端(即权威)?我在尽量避免往返。。。不确定是否可能。我不确定问题出在哪里,但我怀疑答案是“使用GUID”。谢谢你的回答。我可能误解了工作流的一个关键部分,但是如果客户机正在生成种子(因为客户机操作首先发生),那么这是可以操纵的。仅当服务器生成种子时,此操作才有效。。。这就是我的困境,因为我试图利用Meteor的客户端延迟补偿,这实际上造成了一个鸡和蛋的问题。@Harley这够糟糕了吗?客户端可以窥视下一个随机数,或者服务器可以在客户端登录时在会话开始时生成种子,然后在会话期间存储它?每次客户端使用一个随机数时,服务器都会根据它自己的随机数进行检查。难道客户端不可能看到传入的种子并找出如何提前生成随机数,以便预测将要发生的事情吗?一位同事提出了一个替代方案。。。只需让客户端生成数字,并在最后将结果发送给服务器即可。如果服务器连续记录了3个积极结果,则假设用户“作弊”,并告诉客户机从那时起需要开始与服务器检查其结果。显然,只有在你不介意一点点“欺骗”的情况下,这才会起作用,但对于我的用例来说,这很好。@Harley是的,它会的。我想你必须让服务器生成随机数。最后我使用了客户端生成的随机数,这意味着我可以利用延迟补偿。但我也将结果异步发送到服务器。如果服务器看到用户获得了太多的积极结果,那么它会告诉用户的客户机首先通过服务器运行它的所有请求。因此,合法用户不会受到缓慢往返的惩罚——只会受到潜在的不可靠往返的惩罚。这个解决方案在一个完全不允许作弊的环境中是行不通的,但对我来说,少量的作弊是可以的