选择局域网中的一台计算机作为服务器

6
我正在开发一个小型联网游戏(仅限局域网),其中一台计算机作为服务器,其他所有计算机(包括运行实际游戏的计算机)则作为客户机。实际上,服务器对于用户来说是透明的,但存在是为了简化我对状态管理的控制。我现在的基本概念是,每个玩家的计算机将通过广播方式发出“嘿,我想玩”的请求,并将网络上的其他玩家列表保留下来。在运行游戏的每个玩家表明他们准备好后,选择一台计算机作为服务器,其余的计算机默认为客户端。
在选择哪台计算机用作服务器时,真的有任何已经确定的方法来选择一台并通知其他人吗?
我一直在尝试基本思想,即让所有玩家的计算机选择一个随机数,并使具有最低(或最高,没有关系)数字的计算机成为服务器(重新生成相同数字的计算机的随机数)。每台计算机都会接收其他计算机“掷出”的数字,并决定哪个是服务器,在此之后它将连接到服务器。这似乎很简单粗暴,但我不确定是否重要,因为所有计算机都将物理上在彼此几英尺之内的同一网络中。这样做是否足以胜任工作或者是否有更好的方法?

5
在分布式计算中,这个概念被称为“领导选举”(leadership election)。 - chrisaycock
1
@chrisaycock 非常有趣的概念,感谢您指出。以此为起点已经找到了一些非常有帮助的论文和其他资源。 - Gemini14
1个回答

5
坦白说,我认为做决定比这要复杂一些。我倾向于进行基本信息收集,以确定哪台计算机拥有最强大的性能,并选定它作为服务器(性能是一个模糊的术语,因为最强大的计算机将取决于服务器和游戏的要求)。由于服务器需要运行额外的软件(服务器和游戏),因此除非所有计算机具有相同的规格,否则必然会有一台计算机比其他计算机更适合这项任务。只要所有节点在数据上运行相同的评估,它们都应该达成共识,谁应该领导,或者您可以让创建游戏的第一个节点负责确定哪个节点应该成为服务器。
另外,让服务器定期重新评估自己是否有资格成为服务器也可能很有价值。例如,可能会启动背景进程,这些进程会妨碍其正常运行,或者更强大的节点可能会加入游戏。显然,转移托管游戏的服务器将是不容易的,但这是需要考虑的事情。(请记住,在在线游戏中,如Halo,当所有客户端与服务器的连接下降到某个阈值以下时,游戏会暂停并重新建立在可以提供更好性能的另一台服务器上)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接