【问题标题】:Which is best way to implement timer in turn based multiplayer game?在基于轮流的多人游戏中实现计时器的最佳方法是什么?
【发布时间】:2016-12-10 06:48:55
【问题描述】:

我正在使用 Node.js 为服务器端脚本实现多人回合制游戏。 游戏就像垄断,多房间和单房间有多个玩家。 我想为所有房间实现定时器,我浏览了很多文章,我有两种选择:

1}我将立即向每个玩家发送当前时间,他们将处理计时器并在轮到或时间到时发送到服务器。

2} 我可以在服务器上管理计时器并每秒发出一次,但它会给服务器造成负载,也会混淆 Node.js 是 单线程 那么如何我为多个房间管理多个 setInterval()。它将添加到队列中并会产生延迟。

所以请帮助我最好的选择。

【问题讨论】:

    标签: javascript node.js sockets timer


    【解决方案1】:

    混合方法可能最适合此问题。最初,您可以通过从服务器接收计时器的当前值来开始。随后,客户端可以独立运行计时器,而无需向服务器请求当前时间。如果准确性对这个项目很重要,那么您可以每 15 秒左右向服务器请求一次,以调整可能导致服务器与其客户端之间出现差异的时间漂移​​。

    另外,请注意,尽管 Node.js 是单线程的,但它本质上是异步的。

    【讨论】:

    • 是的,我可以这样做,但万一所有播放器意外关闭或套接字断开连接,我该怎么办?我应该为此创建活动吗?
    • 在这种情况下,您可以默认依赖客户端计时器并忽略发生的时间漂移​​。通常,无论如何,这种不准确性只会在毫秒级。或者,根据项目的功能,您可能希望冻结计时器并显示一条指示断开连接的临时错误消息。
    • 是的,这是可能的。我尝试使用服务器端,但一旦空间增加,时间就像幽灵一样......
    • 我可以做一件事,管理每个玩家的对象,如果都断开连接,那么我可以从服务器端停止游戏。
    • @YadavChetan 你实现了吗?我正在尝试实现这一点,但是如果所有玩家都断开连接怎么办,转弯将如何继续移动?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多