我只是想知道什么语言是开发游戏服务器以支持大量(数千)用户的好选择?我涉猎python,但意识到它只会太麻烦,因为它不会在核心之间产生线程(意味着8核心服务器= 1核心服务器).我也不太喜欢这种语言(那种"自我"的东西让我大吃一惊).
我知道C++是性能方面的工作语言,但我讨厌它.我不想处理它草率的语法,我喜欢用托管语言来控制它.这带我到C#和Java,但我对其他语言开放.我喜欢.NET的简单性,但我想知道,从速度上来说,这对于这项工作是否有益.请记住,因为它将部署在Linux服务器上,它将在Mono框架上运行 - 不确定这是否重要.我知道Java在语法方面非常类似于.Net,但我对它的体验是有限的.是否有任何框架可供其使用,或者可以在开发中轻松实现?
请帮助我和我挑剔的自己到达解决方案.
更新:我并不是说听起来如此挑剔,我真的不认为我是.我真正排除的唯一语言是C++,我不喜欢Python因为可扩展性问题.我知道进程之间有通信的方式,但如果我有一个8核服务器,为什么我需要制作8个进程?有更优雅的解决方案吗?
我讨厌说出来,而且我知道我冒着降压模式在这里冒险,但听起来并不像你有一种语言.所有编程语言都有它们的怪癖,程序员只需要适应它们.完全有可能在Python中编写一个没有类的工作服务器(消除"自"变量类引用),同样也很容易用干净的语法编写C++.
如果您希望部署跨平台并希望开发跨平台,那么您最好的选择可能是Java.它比C和C++这样的编译语言缩短了开发周期,但是比Python和Perl这样的解释语言具有更高的性能(可论证,但我一直都是反Java = P),你不必使用非官方的实现,如Mono可能不时不支持所有语言的功能.
Erlang是一种围绕多个服务器的并发和分发而设计的语言,非常适合服务器软件.关于Erlang和游戏服务器的一些链接:
http://www.devmaster.net/articles/mmo-scalable-server/
http://www.erlang-consulting.com/euc2005/mmog/mmog_in_erlang.htm
我正在考虑在Erlang中自己编写一个游戏服务器.
我可能会稍微偏离主题,但这个话题让我感兴趣,因为我(业余爱好)在很多游戏服务器(MMORPG服务器)上工作 - 在其他人的代码和我的代码上.那里有你感兴趣的文献,如果你想要一些参考文献,请给我留言.
在您的问题中让我感到震惊的一件事是希望为多线程应用程序提供服务.从我谦虚的经历来看,这不太合适.:-)
当您为数千名用户提供服务时,您需要尽可能模块化的设计,因为您的主要目标之一是保持整个服务的正常运行.游戏服务器往往相当复杂,因此会有很多显示停止的错误.不要因为单点故障而使你的生活变得悲惨(一次申请!).
相反,尝试构建可在多个主机上运行的多个进程.我的拙见建议如下:
使它们独立,因此失败的过程与服务无关.
使它们变小,以便服务的不同部分及其交互方式易于掌握.
不要让用户直接与gamelogic OR DB通信.编写代理 - 当您拥有大量用户时,网络堆栈可以并且将在不同的体系结构上显示奇怪的行为.还要确保以后可以"清理"/过滤代理转发的内容.
有一个只监视其他进程以查看它们是否仍能正常工作的进程,并能够重新启动部件.
让它们可分发.从一开始就通过TCP协调进程,否则会遇到可伸缩性问题.
如果您拥有大型景观,请考虑通过按地理位置划分服务器来动态划分负载的方法.不要让每个后端进程都保存内存中的所有数据.
我已经移植了一些用C++和C#编写的引擎,用于在Linux,FreeBSD和Solaris上运行的主机(在旧的UltraSparc IIi上 - 是的,单声道仍在那里运行:).根据我的经验,考虑到它在sparc机器上运行的古老硬件,C#足够快.
业界(据我所知)倾向于使用大量的C++来完成服务工作,并为实际的游戏逻辑嵌入脚本语言.啊,已经写得太多 - 很酷的话题.
说到纯粹的性能,如果你可以运行Java 6,那么与优化的C++相比,你可以获得大约1:1的性能(尽管有特殊情况,有时Java更快,有时候是C++),你唯一的问题当然是像数据库库这样的东西. ,互连性,可扩展性等.我相信每种问题都有各种各样的优秀解决方案,但你找不到一种可以解决所有问题的语言,所以我必须给你一个古老的建议:选择你喜欢的语言并使用那个.
哦,你还在读这个吗?:)好吧,这里有一些额外的指示.
EVE Online使用Python作为客户端和服务器端代码,它既有bug也有滞后性,因为我不认为我应该在这里写一些内容,因此这是一个如何将Python扩展到(很差)服务大量的例子用户
虽然Java对各种相关问题有很好的解决方案,但对于大量用户来说,它并不是最好的语言; 如果没有调整,它就无法很好地扩展到极端.然而,有多种VM解决方案可以解决这个问题,例如Terracotta可以很好地完成工作.
虽然C++相当麻烦,但它允许与系统进行这种低级别的交互,实际上你可能会发现自己做了一些你认为不能做的事情.我正在考虑像运行时代码块的动态每核闪烁一样,以尽可能高效地"填充"处理器的每个可能的时钟周期,以获得最佳性能等等.
Mono远远落后于Windows平台上的.NET VM /等价物,因此您将无法使用C#的最新和最高级功能.然而,目前Windows XP(x64)OEM许可证的价格非常便宜,只需很少的投资就可以获得大量的许可证,然后您可以在平台上运行您的代码.并且不要陷入Linux炒作,只有当你真的知道如何使用它时,Linux才是你的救星,尤其是XP现在非常快速和稳定.
你需要什么样的表现?
对于需要大量并发性的服务器来说,twisted非常适合,就像erlang一样.要么容易支持大规模并发,要么具有分布式计算的功能.
如果你想在python应用程序中跨越多个核心,如果你想跨越多台机器,那就做同样的事情 - 运行多个进程.