
场景: 状态同步网游服务端开发. 不考虑客户端;
目前:
我会 c#(很久没用) golang, php, nodejs.
我看了rust c++ 菜鸟教程, 和c# golang 主要在GC差异, 手动释放内存. 估计学习20天能够写项目.
golang 问题:
golang 没有类, 假继承, 未来GC估计也是个问题.
若是继续以GOLANG开发, 为了实现真继承, 会大量的 switch Inf.(type) case 转换类型, 没有更好的方案. 用接口反而更浪费性能.
因为golang的继承问题, 以及未来的GC考量, 所以放弃.
c++ rust:
该如何选择? 十分纠结.
问题:
若勉强用golang继续开发, GC未来是否是严重问题? 堆硬件其成本比C++高多少? C++ 还是 rust 更复合网游服务端开发的场景?综合我的情况, 请给些建议, 谢谢;
刚好我也是游戏研发,以下只讨论服务端的开发,简单说一下我的观点。
我习惯将服务端的开发工作分成三类:
首先,无论是以上的任何一个部分的开发工作,语言选型都不是单一因素决定的,主要考量有以下几点:
公司技术底蕴,是否有积累的一套开发工具链 游戏项目特点,长链接还是短链接,实时性强还是密集计算 现有人员技术侧重,擅长的技术栈 技术带来的性价比,招聘的难易度等所以,从以上一些考量点来分析:
游戏服:这部分的开发选择有java,cpp,golang,c#这四个,php和nodejs我也见过有开发游戏的,但是太小众并且游戏体量很小,这里不分析。
java和c#比较类似,只是java比较流行罢了,这里拿来一并说,带gc的语言开发起来比较快速,性能自然没办法压榨了,就拿我在做的一款SLG手游来说,也是java写的,单服上5000,其实优化代码、消息后上7000也不是特别大的问题,所以虽然很多写cpp的人老是喷java,但是这玩意确实写起来快,毕竟策划需求改的更快啊,而且java好招人、上手快,对于老板来说性价比特别高。 cpp主要还是用在实时性比较强的游戏,比如像吃鸡、农药这类的游戏,特点就是特别能压榨系统性能,做好消息优化后单服至少上万,比如skynet框架轻松能扛住3w在线,cpp+lua万金油组合也不会差太多 golang其实我觉得是不太适合做游戏服,性能一般,也没有很好的办法做热更,总之语言特点用起来很鸡肋,尽管现在已经有不少新公司在使用golang做游戏服了,但是我并不是很看好,不如java来的舒服总结:游戏服java或者cpp,其他的都不是太靠谱。
2.核心组件:这里主要指的还是配合游戏服使用的一些功能组件,典型就是网关,日志中心这一类,特点就是性能要求高,需求改动小,几乎可以做成整个公司所有项目共用的功能,所以我个人推荐是cpp,其他的都不推荐,当然,像心动拿golang做了一个通用网关组件,我只能说你喜欢就好。
总结:cpp优先。
3.辅助组件:这一类主要是指充值服、GM后台、以及配合后台做数据分析的组件、还有运维的一些组件等,这一类我是推崇使用golang做开发的,原因主要是开发快速,一套完整的工具链效率杠杠的,招聘也方便,哪怕是新手上手速度也很快,得益于go较小的内存占用和天生的容器化部署优势,把运维都容器化,轻松上线应用组成集群。
总结:golang胜出。
对于rust,如果是做游戏服务端是墙裂不建议学,毕竟不会有cto因为你会rust给你加分的,甚至在实际中你没有使用场景,学一下又忘记了,又拿起来学学?这不闹么
如果是客户端,你要是能做到引擎开发级别,或许可以用的上,比如在一些高性能场景比如渲染,或者是一些硬件操作方面,可以和cpp进行混编使用。
所以,我的建议是忘记rust,入坑cpp+lua或者cpp+py,再混点go,要是还有闲情去搞搞unity或者unreal吧
c++ 强烈推荐