写游戏用python还是c好点_为什么多数游戏服务端是用 C++ 来写
早年开发游戏必须用C++,这没得说,2000-2004年,java还没有nio,其他动态语言不抗重负,只能C/C++能开发出完整可用的游戏服务端。直到2005年,韩国的游戏很多都还是纯C++写服务端,金山之前也开发过很多纯粹C++的游戏服务端,后来大家都切了。
现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang。我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性能测试程序(机器人)会选择 gevent。那是不是我们就不用C++呢?我们用 C来做网络,不用C++,但是C的比例在所有代码中占比有限。
这是否意味我们可以放弃C/C++了?也不是:C语言是一把锋利的匕首,而现代动态语言是一把长剑。平时匕首可以藏在身上,大部分时候用长剑披荆斩棘就够了,但当你碰到坚硬的石头,长剑不管用了,那么拿出匕首来果断的切碎他。
对于一个成熟领域而言,我的建议是尽量用更高级一点的开发语言,因为游戏开发很多核心技术都有了较为妥当的解决方法。大量的服务端逻辑其实都是在等待,等待网络,等待数据库,这种情况下用C得不偿失。但是服务端有一些地方还是躲不开C/C++,比如当服务器涉及到 3D计算的话(国内很多2D服务端,国外很多3D服务端),大量的矢量矩阵,除了用C++封装出一套好用的数学库外,即便直接用java写,那也是很麻烦的。再比如现在快速动作越来越多,为了让玩家操作更流畅,我需要基于 UDP快速可靠协议,协议开发用 java或者scala,性能上是没办法满足要求的,况且协议实现后要和客户端通信,你没法让所有客户端跟着你一起用java/scala。再比如某些cpu密集的抽象度高的模块,如 aoi或者 ai模块。
对于一个新兴领域而言,C/C++很多情况下是你别无选择的东西。比如移动化浪潮刚起步的时候,还没有啥 cocos或者 unity你真要开发游戏,你必须迅速的使用起 OpenGL ES和 OpenSL,然后再叠加某一脚本,以快制胜,第一批移动浪潮上发财的就是这些游戏。又或者,你可以根本躲开,先不介入,等到几年后cocos和 unity成熟了,你在介入用lua / C#写程序。再比如服务端你如果离开熟悉的游戏和web,去开发一个陌生的领域,如流媒体服务,你会发现这怎么和10年前的游戏一样呀,什么高级工具都不给我用用,这时你可以再等个四五年应该高级工具会出现,异或你想领先别人时,你就果断的拿出 C/C++来解决之,这就是C独有的开拓新领域能力。
大部分答案都是非黑即白,非此即彼。不要只会C不会动态语言,避免成为一个傻逼;也不要只会动态语言不会C,避免离开熟悉的温室就活不下去。对于一个新手而言,如果什么都没学过,我的建议是先用快速开发的东西,把项目弄起来再说,有精力有机会的情况下,也不能完全放弃一些基础的东西,让自己残缺了。
PS:在相同架构下,就纯粹性能而言,各种语言性能差距到底是多少呢?如果只开发回合制这些慢节奏游戏,或者HTTP接口,大部分情况都在等待数据库等待用户消息的话,差别确实不大,的确可能5%都不到。如果cpu密集了,那么可以参考下面的图表,总体来说是10-50倍的性能差别:
有人问,说了半天,这个也不行,那个也不完美,而我时间有限,有没有一个更经济实惠的方法呀?如何才一次性达到彼岸呀?时间有限项目吃紧有没有更好的选择?我说有啊!那就是 java。
国内游戏开发绕来绕去还是脚本+C+erlang+go,难道大家就不会其他东西了么?大部分可以的情况下,除了非用C/C++,我推荐各位认真考虑下 java,这个性能上最接近C的东西,能承当大部分cpu密集型事务,却又不会象c那样 crash了找都找不到问题在哪里。同时面向高并发时基于原生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技术栈,世界很大,不是只有游戏;即便游戏,现在的开发方法真的对吗?
写游戏用python还是c好点_为什么多数游戏服务端是用 C++ 来写相关推荐
- node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。
node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...
- python简单小游戏代码-python基础练习之几个简单的游戏
文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...
- python简单游戏程序-python基础练习之几个简单的游戏
文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...
- [游戏服务器]第一章:多人聊天室-服务端
游戏服务器 多人房间 高并发 低延时 数据可靠 ... 那么怎么去实现这些功能呢,下面我将会带着大家一起去探寻游戏服务器的奥秘 我不是巨人,我只是站在巨人的肩膀上 我将会分城多个章节去研究游戏服务器的 ...
- (已完善)基于Python的TCP 协议实现人机聊天(程序具有服务端和客户端)
服务端 实现目标 GUI显示人机互动聊天内容,当客户端输入不完整内容,如'how old',服务器能回复年龄等. GUI当客户端输入"send a file",服务器端回复&quo ...
- python 服务端渲染_客户端渲染与服务端渲染
后端渲染 服务器直接生成HTML文档并返回给浏览器,但页面交互能力有限.适用于任何后端语言:PHP.Java.Python.GO等. 客户端渲染(CSR) 页面初始加载的HTML文档中无内容,需要下载 ...
- 物联网学习篇:Python SDK接入阿里云物联网平台,接收服务端订阅消息
1. 下载SDK SDK下载链接 下载之后,可见得到了一个 qpid-proton-0.29.0.tar.gz 的压缩包. 有两个方法: 1. 直接运用SCP软件拖进服务器中: 2. 直接用wget下 ...
- python TCP套接字服务器v1.1-新增服务端命令功能及修改bug(socket+PyQt5)
TCP聊天服务器套接字v1.1 所有版本记录: v1.0 : TCP聊天服务器套接字|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志,html)+anaco ...
- 游戏开发物语方案点数分配_公司形象 游戏开发物语攻略怎么增加方案点数
小编为玩家们带来游戏开发物语攻略怎么增加方案点数的详细攻略,方案点数只要分配的比较合理的话就可以作为我们公司的一个形象让大众所认知. 可以让方案点数增加的方法: 1.只有当我们的游戏类型和游戏内容契合 ...
最新文章
- L1-047 装睡 (结构体解决)
- 卡耐基梅隆大学提出新型「自适应」技术,可提高「个性化神经机器翻译」质量...
- 安装您的Sbo Add-on插件
- VSCode---Latex论文编辑
- syslog(),closelog()与openlog()--日志操作函数
- mvc html.hidden,MVC Html.HiddenFor在一个循环传递模型回控制器
- [YTU]_2800( 逗逗泡泡的保密电文)
- C#命名规则和编码规范
- 相机标定之4个坐标系之间的变换关系
- C# 操作ACCESS数据库
- centos6.5 Building the main Guest Additions module
- 新浪微博爬虫设计(Python版)
- HTML5 实现图片预览和查看原图
- 单独招生计算机笔试是考什么,单招考试一般考什么内容
- js浏览器页面生命周期
- PHP5.3x被弃用的函数及代替方法
- hdu1711(kmp纯模板)
- mysql 安装部署
- Android P环境 bootchart使用
- 数据中心优化专家Future Facilities公司推出6Sigma DCX最新版本
热门文章
- html请求的跨域问题
- 怎样把图片保存为html文件,在Word中通过把编辑的图片另存为HTML文件实现转换图片...
- 腐败团--刘一手火锅
- BIOS设置nbsp;翻译中文图文教程(一)
- 集成电路,微小电子元件焊接技巧
- html5侧匡下拉注释,可圈可点网资料
- 显示unc路径服务器根目录,路径解释:绝对、相对、UNC 和 URL
- python图片隐写_机窝安全--LSB图片隐写
- 在UE4中改变枢轴位置
- linear-gradient()背景颜色渐变