Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确保socket.io问答游戏中的所有玩家同时显示问题?_Javascript_Node.js_Socket.io - Fatal编程技术网

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

Javascript 如何确保socket.io问答游戏中的所有玩家同时显示问题?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在开发一个在客户端浏览器中运行的多人问答游戏。它在服务器端使用socket.io和node.js,在客户端使用javascript 问题从数据库中挑选出来,同时发送给每个玩家,但较慢的互联网连接可能意味着他们将在不同的时间收到问题 可能的解决方案: 为每个问题发送一个时间戳,告知浏览器何时显示问题。时间戳应为(发送时间+x秒),以说明连接延迟。但是,如果客户知道如何使用控制台,他们可以在问题到达时立即截取问题,从而在所有其他玩家之前看到它 那么,我如何才能确保没有一个玩家拥有不公平的优势

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

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

可能的解决方案:

  • 为每个问题发送一个时间戳,告知浏览器何时显示问题。时间戳应为(发送时间+x秒),以说明连接延迟。但是,如果客户知道如何使用控制台,他们可以在问题到达时立即截取问题,从而在所有其他玩家之前看到它

那么,我如何才能确保没有一个玩家拥有不公平的优势?只有在所有参与者的登录和套接字连接建立后,您才可以编写服务器端逻辑来发送问题

你不能。重要的是,所有玩家都相信他们在同一时间比赛,玩家在同一时间回答问题,结果由服务器决定。没有人会获得优势,因为他们有相同的回答时间,而回答时间是从提出问题到给出答案之间的时间。它们最多只相隔几秒钟,客户端完全不知道它们不是同时玩的

一种可能的解决方案是,当用户收到问题并提交答案时,将信息存储在服务器上。 作为补充,您定义了所有用户都可以提交答案的时间框架(也称为轮)。 您可以通过时间戳中的最小差异来定义赢家。Socket.io延迟不应在逻辑中产生任何重大问题,因为您发送的数据似乎不多,同时Socket具有心跳逻辑,如果您的客户端出现连接问题,他将断开连接。为了减少这种逻辑被破坏的风险,您可以减少SoCKI.IO库可以考虑为断开连接的时间-<代码> PialStudio和 PiTimeOuts可以帮助您。