2011-06-18 62 views
6

我正在研究一台小型网络游戏(仅限局域网),其中一台计算机充当服务器,其他所有计算机(包括运行在同一台计算机上的实际游戏)充当服务器客户端。实质上,服务器对用户来说是透明的,但是为了简化我的状态管理而存在。我现在的基本概念是每个玩家的电脑都会通过广播说“嗨,我想玩”,并且会保留网络上其他玩家的名单。在每个运行游戏的玩家表示他们准备好之后,选择一台计算机作为服务器,其余的默认为客户端。选择局域网上的计算机作为服务器

当选择局域网上的哪台计算机作为服务器时,是否真的有任何确定的方法来选择一个并通知其他人?

我一直在琢磨着简单地让所有玩家的电脑选择一个随机数,并将最低(或最高,无所谓)的那个作为服务器(重新生成计算机的随机数字滚动同一个)。每台计算机都会收到其他人的“滚动”数量,并可以确定哪台服务器可以连接到服务器。这似乎很粗糙,但我不确定它是否重要,因为所有的计算机都会在彼此的几英尺范围内处于同一网络中。这会充分做好这项工作吗?还是有更好的方法?

+5

这个概念在分布式计算中被称为[领导选举](http://en.wikipedia.org/wiki/Leader_election)。 – chrisaycock

+1

@chrisaycock非常有趣的概念,感谢您指出。以此为出发点已经出现了一些非常有用的论文和其他资源。 – Gemini14

回答

5

说实话,我会让这个决定稍微复杂一些。我倾向于做一些基本的信息收集,以确定哪台计算机具有最强大的功能,并选择一台作为服务器(功率故意是一个模糊的术语,因为最强大的计算机将取决于服务器和游戏的需求) 。假设服务器需要运行一个额外的软件(除了游戏之外的服务器),它的理由是,除非所有的计算机具有相同的规格,否则会比其他计算机更适合于该任务。只要所有节点对数据运行相同的评估,他们都应该就谁应该领先或者可以让创建游戏的第一个节点负责确定哪个节点应该是服务器达成共识。

也许值得让服务器设置为定期重新评估它的服务质量作为服务器。例如,后台进程可能会开始阻碍其充分执行的能力,或者一个更强大的节点可以加入游戏。显而易见,主持游戏的服务器并不平凡,但这是值得思考的。 (请记住,这种情况发生在网络游戏Halo中,当所有客户端与服务器的连接降到一定阈值以下时,游戏暂停并重新建立在可提供更好性能的不同服务器上)。

相关问题