在局域网上选择一台计算机作为服务器

Choosing a computer on a LAN to act as a server

本文关键字:计算机 一台 服务器 局域网 选择      更新时间:2023-10-16

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

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

我一直在修改一个基本想法,即让所有玩家的电脑都选择一个随机数,然后让最低(或最高,无关紧要)的电脑作为服务器(为滚动相同数字的电脑重新生成随机数)。每台计算机都会收到其他计算机的"滚动"编号,并可以确定哪台计算机将是服务器,然后再连接到服务器。这似乎很粗糙,但我不确定这是否重要,因为所有计算机在物理上都在同一个网络上,相距不到几英尺。这样做能胜任工作吗?或者有更好的方法吗?

老实说,我会做出比这更复杂的决定。我倾向于收集一些基本信息,以确定哪台计算机拥有最大的权力,并选择那台计算机作为服务器(权力是一个模糊的术语,因为最强大的计算机将取决于服务器和游戏的要求)。考虑到服务器将需要运行一个额外的软件(游戏之外的服务器),除非所有计算机都有相同的规格,否则会有一台比其他计算机更适合执行任务。只要所有节点都在对数据进行相同的评估,他们都应该就谁应该领导达成共识,或者你可以让创建游戏的第一个节点负责确定哪个节点应该是服务器。

还值得让服务器定期重新评估其作为服务器的资格。例如,后台进程可能会启动,从而阻碍其充分执行,或者一个更强大的节点可能会加入游戏。显然,转移托管游戏的服务器是不重要的,但这是需要考虑的。(请记住,这种情况发生在在线游戏中,即Halo。当所有客户端与服务器的连接降至某个阈值以下时,游戏将暂停,并在可以提供更好性能的其他服务器上重新建立)。