如何确保所有玩家在socket.io问答游戏中同时显示问题?

我正在开发一个在客户端浏览器中运行的多人测验游戏。 它在服务器端使用socket.io和node.js,在客户端使用javascript。

从数据库中挑选问题并同时发送给每个玩家,但是较慢的互联网连接可能意味着他们将在不同的时间接收这些问题。

可能的scheme

  • 发送每个问题的时间戳,告诉浏览器何时显示问题。 时间戳将是(发送时间+ x秒)来解决连接延迟。 但是,如果客户知道如何使用控制台,他们可以在问题到达时立即拦截问题,并在所有其他玩家之前看到。

那么我怎么能确保没有一个玩家有不公平的优势?

你不能。 重要的是,所有的玩家都相信他们在同一时间玩,玩家得到同样的时间来回答,结果是在服务器确定的。 没有人可以获得好处,因为他们有相同的时间来回答问题,回答的时间就是提问和回答之间的时间。 他们最多只会相隔几秒钟,客户将不知道他们不能同时玩。

当用户收到问题并且用户提交了答案时,一个可能的解决scheme就是在服务器上存储信息。 作为补充,您可以定义所有用户可以提交答案的时间范围(又名一轮 )。 您可以通过时间戳中的最小差异来定义获胜者。 Socket.io延迟不应该在逻辑中产生任何重大问题,因为看起来你发送的数据并不是那么多,同一时间sockets有逻辑与心跳,如果你的客户端会有连接问题 – 他将被断开连接。 为了减less这种逻辑被破坏的风险,可以减lessSocket.io库可以考虑的中断连接 – pingIntervalpingTimeout可以帮助你。

你可以编写服务器端逻辑来发送问题,只有当你所有的参与者的login和他们的套接字连接build立.. 😉