专用服务器与组合客户端服务器?

时间:2011-12-17 13:09:08

标签: multithreading networking scalability

我正在写游戏服务器和客户端。服务器生成一个世界,并为各种播放器客户端提供服务。它不是大型多人游戏。

客户端(至少现在)运行一个相当苛刻的软件渲染器,以及进行标准的客户端模拟(然后需要权威服务器批准),因此这方面可用的任何处理可扩展性都是好。

服务器也将是处理器密集型的,并且鉴于项目的性质,随着项目的进展,服务器可能会变得更加紧张。世界是程序性的,其中一些在游戏中发生;根据当时的系统功能(理想情况下运行的外部进程最少),在游戏开始之前设置世界选项。因此,服务器绝对需要硬件线程数量的可扩展性。

同样,由于不是MMO ,玩家都可以访问客户端和服务器,以便他们可以设置自己的服务器。许多玩家只有一台机器可以同时托管服务器,并运行客户端,以便能够与他们的朋友一起玩。基于这个事实,哪个会更好地为我服务?

  • 组合的客户端和服务器进程
  • 单独的客户端和服务器进程

......为什么?

PS。即使上面的一些复杂性只是稍后才会通过,我需要尽可能早地使架构(在这方面)正确。

2 个答案:

答案 0 :(得分:1)

关注点的分离始终是一个重要因素,因此最好将它们作为单独的流程保留。它的性能也更好。如果我只想使用客户端功能,则没有理由将服务器相关代码保留在同一个应用程序中。我只会在需要时启动它。

答案 1 :(得分:1)

我认为帮助您做出决定的最重要方面是 - 是否存在为客户端和服务器共享的任何计算密集型任务?如果你可以为客户端和服务器做一次计算而不是两次,那么有一个进程是有意义的(但这可能很难实现)。否则我说分开吧。

我发现分离过程没有什么优势:

  • 当客户端崩溃时(我会说复杂的渲染器和/或有缺陷的图形驱动程序更可能)服务器保持不动
  • 意外(和/或愤怒的QQ)退出游戏不会为其他玩家杀死游戏
  • (如果需要)将服务器绑定到少数核心,将客户端绑定到其他人
  • 更容易
  • 你可能还需要编写专用服务器(所以它可以托管在远程服务器上,可能没有图形),并将其移植到其他操作系统可能更容易......
  • 使客户端代码整体不那么复杂

(如果我想出来,我可能会在列表中添加一些东西)