开发游戏服务器的好语言?

2022-09-03 08:20:47

我只是想知道哪种语言是开发游戏服务器以支持大量(数千)用户的好选择?我涉足了python,但意识到这将是太麻烦了,因为它不会跨内核生成线程(意味着8核服务器= 1核服务器)。我也不太喜欢这种语言(那种“自我”的东西让我很生气)。

我知道C++是工作在绩效方面的语言,但我讨厌它。我不想处理它草率的语法,我喜欢我的手被托管语言握住。这让我想到了C#和Java,但我对其他语言持开放态度。我喜欢 .NET 的简单性,但我想知道,在速度方面,这是否对工作有好处。请记住,由于这将部署在Linux服务器上,因此它将在Mono框架上运行 - 不确定这是否重要。我知道Java在语法上与.Net非常相似,但我的经验有限。是否有任何框架可以简化开发或缓解?

请帮助我和我挑剔的自己到达一个解决方案。

更新:我不是故意听起来那么挑剔,我真的不认为我是。我唯一真正排除的语言是C++,Python我不喜欢,因为可扩展性问题。我知道有进程之间的通信方式,但是如果我有一个8核服务器,为什么我需要做8个进程呢?有没有更优雅的解决方案?


答案 1

我讨厌这样说,我知道我在这里冒着一个向下的mod的风险,但这听起来不像是有一种语言适合你。所有编程语言都有其怪癖,程序员只需要适应它们。完全有可能在没有类的情况下用Python编写一个工作服务器(消除“self”变量类引用),同样,用干净的语法编写C++同样容易。

如果你想部署跨平台,也想开发跨平台,你最好的选择可能是Java。它比C和C++等编译语言的开发周期更短,但比Python和Perl等解释型语言的性能更高(有争议,但我一直反对Java = P),而且您不必使用Mono等非官方实现,这些实现可能不时不支持语言的所有功能。


答案 2

我在这里可能会稍微偏离主题,但这个话题让我感兴趣,因为我(业余爱好)在相当多的游戏服务器(MMORPG服务器)上工作过 - 在其他人的代码上以及我的代码上。那里有你会感兴趣的文献,如果你想要一些参考,请给我留言。

在你的问题中,让我印象深刻的一件事是,想要通过多线程应用程序为一千个用户提供服务。从我的谦卑经验来看,这并不奏效。:-)

当您为成千上万的用户提供服务时,您需要一个尽可能模块化的设计,因为您的主要目标之一是保持服务作为一个整体正常运行。游戏服务器往往相当复杂,因此会出现不少令人窒息的错误。不要因为单点故障(一个应用程序!)而让你的生活变得悲惨。

相反,请尝试构建可在多个主机上运行的多个进程。我的谦虚建议如下:

  • 使它们独立,因此失败的进程将与服务无关。
  • 使它们变小,以便易于掌握服务的不同部分以及它们的交互方式。
  • 不要让用户直接与游戏逻辑或数据库进行通信。编写代理 - 当您拥有大量用户时,网络堆栈可以并且会在不同的架构上显示奇怪的行为。还要确保以后可以“清理”/过滤代理前进的内容。
  • 有一个进程,该进程将仅监视其他进程以查看它们是否仍在正常工作,并具有重新启动部件的功能。
  • 使它们可分发。从一开始就通过 TCP 协调进程,否则您将遇到可伸缩性问题。
  • 如果您有大型景观,请考虑通过按地理位置划分服务器来动态划分负载的方法。不要让每个后端进程将所有数据保存在内存中。

我已经移植了一些用C++和C#编写的这样的引擎,用于在Linux,FreeBSD和Solaris上运行的主机(在旧的UltraSparc IIi上 - 是的,mono仍然在那里运行:)。根据我的经验,C#足够快,考虑到它在sparc机器上运行的古老硬件。

这个行业(据我所知)倾向于使用大量的C++来服务工作,并为实际的游戏逻辑嵌入脚本语言。啊,已经写得太多了 - 很酷的话题。