游戏服务端一般用什么语言,游戏服务端是什么
早些年,开发游戏需要用C,但是2000年到2004年,java没有nio,其他动态语言用不起。只有C/C可以开发一个完全可用的游戏服务器。直到2005年,韩国游戏在服务器端大多是纯C写的。金山之前也开发了很多纯C游戏服务器,后来大家都砍掉了。
有很多现代的选择。Javascript,c python,c lua,scala,go和erlang。我们的性能服务器使用java,逻辑服务器面向python,高并发选择scala,下一级高并发或性能测试程序(robot)选择gevent。我们不用C吗?我们用C建立一个网络,虽然不用C,但是所有代码中C的比例是有限的。
这是否意味着我们可以放弃CC?不,C语言是一把锋利的匕首,而现代动态语言是一把长剑。一般可以把匕首藏在身上。大多数情况下,用一把长剑砍脊椎就够了,但是当葛席德碰到一块坚硬的岩石,长剑没有用的时候,他拿出匕首,果断地砍了下去。
在成熟的领域,建议使用尽可能高的开发语言。因为游戏开发的很多核心技术都有合适的解决方案。很多服务器端的逻辑其实都在等待,等待网络,等待数据库。这种情况下,C无法弥补损失。但是服务器端还是有不可回避的地方。比如服务涉及3D计算的时候((国内很多2D服务器,国外很多3D服务器))))),大量的向量矩阵用C封装,形成一个简单易用的数学库,另外直接用java。比如现在高速动作越来越多。为了让播放器的操作更加流畅,需要开发一个基于UDP的高速可靠的协议。协议开发使用java或scala,但性能不尽如人意。此外,为了在实现协议后与客户端通信,所有客户端必须一起使用java/scala。还有cpu密集型的高抽象模块,比如aoi和ai模块。
在新的领域,C/C往往别无选择。比如移动浪潮之初,还没有cocos和unity。真正开发一款游戏,必须快速使用OpenGL ES和OpenSSL,然后叠加一个脚本才能胜出。正是这些游戏在最初的移动化浪潮中发了大财。或者,从根本上避免,不要先介入。几年后,cocos和unity会成熟,可以介入,等待lua/C#编程。比如服务器离开熟悉的游戏和网络,去开发流媒体服务等不熟悉的领域,就会明白为什么不用任何先进的工具,就像10年前的游戏一样。这个时候,我们应该已经等了四五年高级工具出现了。当XOR想领先别人的时候,果断提出CC方案。这是C开辟自己新领域的能力。
大部分答案都不是非黑即白,否则也就不是别的了。只让C不是动态语言,不要做傻子;不是光靠动态语言学不了C,而是离不开习惯的温室。如果一个初学者从来没有学过任何东西,我的建议是从高速开发的东西开始项目。如果有能量的机会,不能完全放弃基本的东西,让自己不完整。
PS:同一个架构下,单纯为了性能,各语言的性能差异有多大?如果只开发慢速游戏(比如回合制)或者HTTP接口,大多数情况下数据库等待用户的消息,差别可能很小,真的不到5%。如果是处理器密集型,请参考下图:整体性能相差10-50倍。
有的人说了半天,问这个不好,那个也不完美。我时间有限,有没有更经济的办法?如何一次到达彼岸?时间有限的项目有更好的选择吗?我说有!那是java。
是国产游戏开发太过迂回,还是剧本的C二郎go?大家就不能干点别的吗?大多数情况下,建议认真考虑除CC之外的java。在这个性能上,最接近C的可以承担大部分cpu密集型的事务,但是像C这样崩溃不知道哪里出了问题。同时,基于高并发原生jvm的scala可以提供类似erlang的简单方法,函数表达式编程帮助大规模并发actor;同时java可以很容易和javascript结合,js会是动态语言中最快的。还有java groovy,提供python/ruby的通用编程。可以媲美python/ruby的超高开发效率,同时可以结合scala实现高并发。最重要的是,java很容易编写和采用。到处都有写java的工程师,大部分语言层面的培训都可以省略。
国内游戏开发者大多拒绝学习java。因为很多开发者自己都没接触过。现在排斥java的人,大多只是在游戏圈里瞎转悠,偶尔开发web,缺乏其他行业和领域经验的人。除了游戏,目前有多少世界级的开源服务器是java开发的?游戏真的很特别吗?不,不是那样的。如果国外很多java开发的游戏服务器知道java技术栈在游戏服务器领域解决不了什么,请告诉我。看看Java上下游的scala,javaScript,groovy之类的东西。所以,如果你有时间和条件,我建议你认真考虑一下java技术栈。世界很大,不只是游戏。游戏中,现在的开发方式真的正确吗?