选择LAN上的计算机作为服务器

Gem*_*i14 6 c c++ lan udp

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

当选择LAN上的哪台计算机用作服务器时,是否有任何既定方法可以选择一台并通知其他计算机?

我一直在修补简单地让所有玩家的计算机选择一个随机数并且具有最低(或最高,无关紧要)的那个是服务器的基本想法(为同一个计算机重新生成随机数) ).每台计算机都会收到其他计算机的"滚动"数,并可以确定哪个是服务器,之后它可以连接到它.这似乎很粗糙,但我不确定它是否重要,因为所有的计算机都会在几英尺之内的物理上位于同一个网络上.这是否能充分发挥作用还是有更好的方法?

Chr*_*son 5

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

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