首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >开发游戏服务器的好语言?

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

Stack Overflow用户
提问于 2008-12-25 08:25:55
回答 15查看 16.2K关注 0票数 15

我想知道用什么语言开发一个支持大量(数千)用户的游戏服务器会是一个很好的选择?我涉足了python,但我意识到它太麻烦了,因为它不会跨核心(即8核server=1核心服务器)产生线程。我也不是很喜欢这种语言(那种“自我”的东西让我觉得很恶心)。

我知道就性能而言,C++是适合这项工作的语言,但我讨厌它。我不想处理它草率的语法,我喜欢托管语言来拉我的手。这让我想到了C#和Java,但我对其他语言持开放态度。我喜欢.NET的简单性,但我想知道,在速度方面,这是否适合这项工作。请记住,由于它将部署在Linux服务器上,它将在Mono框架上运行-不确定这是否重要。我知道Java在语法上与.Net非常相似,但我的经验有限。在开发过程中,有没有什么框架可以用来解决这个问题呢?

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

更新:我不是故意这么挑剔的,我真的不认为我是这样的。我唯一真正排除的语言是C++,因为可伸缩性问题,我不喜欢它。我知道有很多方法可以在进程之间通信,但是如果我有一个8核的服务器,为什么我需要8个进程?有没有更优雅的解决方案?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2008-12-25 13:50:59

Erlang是一种围绕并发和分布在多个服务器上设计的语言,非常适合服务器软件。关于Erlang和游戏服务器的一些链接:

http://www.devmaster.net/articles/mmo-scalable-server/

http://www.erlang-consulting.com/euc2005/mmog/mmog_in_erlang.htm

我正在考虑自己用Erlang编写一个游戏服务器。

票数 16
EN

Stack Overflow用户

发布于 2008-12-25 08:30:17

我不想这么说,我知道我在冒着失败的风险,但听起来好像没有适合你的语言。所有的编程语言都有它们的怪癖,程序员只能简单地去适应它们。用Python语言编写一个没有类的服务器是完全可能的(消除了"self“变量的类引用),同样,用干净的语法编写C++也同样容易。

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

票数 21
EN

Stack Overflow用户

发布于 2008-12-25 15:57:20

我可能在这里有点离题,但是这个话题引起了我的兴趣,因为我(业余爱好)在相当多的游戏服务器(MMORPG服务器)上工作过--除了我自己的代码之外,还在其他人的代码上工作。有一些你会感兴趣的文献,如果你想要一些参考资料,请给我留言。

在你的问题中,有一件事让我印象深刻,那就是希望通过多线程应用程序为1000名用户提供服务。从我卑微的经验来看,这并不是很有效。:-)

当您为成千上万的用户提供服务时,您需要一个尽可能模块化的设计,因为您的主要目标之一将是保持整个服务的正常运行。游戏服务器往往相当复杂,因此会有相当多的停止显示的bug。不要因为单点故障(一个应用程序!)而让你的生活苦不堪言。

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

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

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

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

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/392624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档