【发布时间】:2018-12-12 19:48:17
【问题描述】:
我有一个游戏,用户必须在 10 秒内回答问题。这意味着当 10 秒结束时,如果他/她尚未回答问题,则不允许用户回答问题。此时服务器也不应该允许用户回答问题,因为服务器也知道 10 秒已经过去。
为了有效性和确保客户端不被以任何方式操纵,我决定将计时器放在服务器上并简单地向客户端显示计时器(显示计时器很重要)。
问题是我如何向用户显示计时器并确保计时器在客户端上有效。
Socket IO 在用户实际玩游戏时处理客户端和服务器之间的交互,http 处理用户在游戏中所做的一切(登录、注册、帐户、支付等)。
我的堆栈是带有 java、node js 服务器、socket io 的 android。我已经设置好了,唯一的问题是在客户端和服务器上同步计时器时要采取的方法。
我在想一种方法可能是提供一个问题并基本上像这样(在服务器上)在套接字上设置一个变量
var t = new Date();
t.setSeconds(t.getSeconds() + 12); //2 seconds extra for network lag
socket.allowed_time = t
然后将问题发送给客户端并向用户显示 10 秒倒计时。每当客户端响应时,检查当前时间是否大于 socket.allowed_time。考虑到网络延迟,这种方法似乎不可靠。
像 8 ball pool i play lot 这样的游戏在 2 个用户之间进行实时游戏,并且两个用户之间的时间是同步的(实时),我注意到网络延迟也对游戏有很大影响。
【问题讨论】:
标签: java android node.js server client