在局域网上选择一台计算机作为服务器
Choosing a computer on a LAN to act as a server
我正在开发一款小型网络游戏(仅限局域网),其中一台计算机充当服务器,所有其他计算机(包括在同一台计算机上运行的实际游戏)充当客户端。从本质上讲,服务器对用户是透明的,但它的存在是为了简化我的状态管理。我现在的基本概念是,每个玩家的电脑都会通过广播说"嘿,我想玩",并在网络上保留其他玩家的列表。在每个运行游戏的玩家表示他们已经准备好后,选择一台计算机作为服务器,其余计算机默认为客户端。
在选择局域网上的哪台计算机作为服务器时,是否真的有任何既定的方法来选择一台计算机并通知其他计算机?
我一直在修改一个基本想法,即让所有玩家的电脑都选择一个随机数,然后让最低(或最高,无关紧要)的电脑作为服务器(为滚动相同数字的电脑重新生成随机数)。每台计算机都会收到其他计算机的"滚动"编号,并可以确定哪台计算机将是服务器,然后再连接到服务器。这似乎很粗糙,但我不确定这是否重要,因为所有计算机在物理上都在同一个网络上,相距不到几英尺。这样做能胜任工作吗?或者有更好的方法吗?
老实说,我会做出比这更复杂的决定。我倾向于收集一些基本信息,以确定哪台计算机拥有最大的权力,并选择那台计算机作为服务器(权力是一个模糊的术语,因为最强大的计算机将取决于服务器和游戏的要求)。考虑到服务器将需要运行一个额外的软件(游戏之外的服务器),除非所有计算机都有相同的规格,否则会有一台比其他计算机更适合执行任务。只要所有节点都在对数据进行相同的评估,他们都应该就谁应该领导达成共识,或者你可以让创建游戏的第一个节点负责确定哪个节点应该是服务器。
还值得让服务器定期重新评估其作为服务器的资格。例如,后台进程可能会启动,从而阻碍其充分执行,或者一个更强大的节点可能会加入游戏。显然,转移托管游戏的服务器是不重要的,但这是需要考虑的。(请记住,这种情况发生在在线游戏中,即Halo。当所有客户端与服务器的连接降至某个阈值以下时,游戏将暂停,并在可以提供更好性能的其他服务器上重新建立)。
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 另一台电脑上的Visual Studio C++项目无法生成
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 当我在支持 avx2 的机器上编译并在另一台仅支持 avx 的机器上运行二进制文件时会发生什么?
- 如何在另一台未安装 Visual Studio 的计算机中使用由 Visual Studio 生成的 dll
- 在另一台计算机中运行 GTKMM 代码时未定义的符号
- 将Visual Studio C 构建的中间文件移至另一台计算机
- 为什么我的Glreadpixels程序在另一台计算机中不起作用
- 在另一台计算机MFC C++上不进入while循环
- 我可以将TokenPrivileges数组从一台计算机复制到另一台计算机吗
- 从另一台计算机运行opencv可执行文件
- 通过网络直接从另一台计算机的内存中读取文件
- fwrite在一台计算机上浮动,在另一台计算机中浮动
- 在C++中使用 zeromq 将序列化的 Mat 对象发送到另一台计算机
- 一台计算机中出现 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?
- 使用蓝牙将陀螺仪数据传输到另一台计算机
- 使用脉冲编码调制从一台计算机到另一台计算机的数据传输
- 如何在另一台计算机(linux)上使用OpenCV运行c++库
- 在局域网上选择一台计算机作为服务器