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

时间:2017-03-05 18:39:23

标签: javascript node.js socket.io

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

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

可能的解决方案:

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

那么我怎样才能确保没有玩家有不公平的优势广告在其他人面前收到问题?

3 个答案:

答案 0 :(得分:1)

你不能。重要的是所有玩家都认为他们在同一时间玩,玩家得到相同的时间回答,结果是在服务器上确定的。没有人获得优势,因为他们有相同的时间来回答,回答的时间是问题呈现和答案之间的时间。它们最多只相隔几秒钟,客户将完全不知道他们没有同时玩。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

只有在所有参与者的登录及其套接字连接建立后,您才可以编写服务器端逻辑来发送问题..; - )