现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

为什么多数游戏服务端是用 C++ 来写呢?

2020-03-06 07:21 工业·编程 ⁄ 共 1182字 ⁄ 字号 暂无评论

我有近十年的游戏后端开发经验,端游,手游都做过。从我的观察而言,在决定后端技术栈选择方向时,除了编程语言自身的开发效率,库及社区的丰富和活跃程度,以及解决问题的复杂程度外,还需要非常关注: 基础设施、配套服务,以及开发人员招聘培养的难易度。

回到题主关于C++的问题。首先一些新的游戏产品,后端开发技术已经百花齐放了,jvm系,Erlang,go,Python都有。那么仍在坚持C++的原因是啥呢?我觉得有两点:

1. 历史积淀和闭源思维。十多年前,技术栈,包含编程语言的选择还不是很多。C++是当时看来少数,被证明稳定,可靠,高性能,具备丰富功能的高级语言。所以首当其冲,被选择作为开发主力。基于此,进程框架,诸如线程模型,定时器,容器等;IPC,比如socket,共享内存,并由共享内存进一步衍生出的数据恢复技术等都蓬勃发展。而且大厂之前都有封闭的思想,这和现在开源流行完全不同。生怕别人知道自己的技术优势,也非常不信任社区产品的质量。结果就是——造轮子,各种造。从数据库,到序列化工具,从xml解析器到负载均衡组件,凡是游戏开发碰到的,全部自己造,而且都拿C++造。

这些不可谓不成功,不成功也走不到今天。但历史的荣耀也会成为包袱。十多年过去了,当技术人员想要做创新时,才发现什么都有,什么都是C++接口。好吧,换个Java试一下,请为相关库和服务的接口都提供新的binding吧。什么,你担心自己的binding有bug,而且时间不够?那还是用cpp吧。为什么不能让技术研发部统一开发?哦,上千个产品用cpp目前都跑得挺正常,你的需求我们知道了,有空再做吧,再做吧,再做吧。。。

2. 游戏存在高性能需求场景。目前无可替代。别的不说,一个简单的帧同步,每秒30/60帧,多人数据同步。现在我们用c++也只能支持单机小几千,大概就是每秒十多万个包吧。所以没有很强的信心换成别的语言。因为成本已经是这样了,为何要在机器成本没法明显优化的情况下,再去增加技术风险和迁移成本?在一些卡牌类型游戏中,后端也存在大量的数值密集型计算。虽然在架构上可以分布式,可以扩展,但降低机器成本同样非常重要。特别是对在线规模很大的游戏而言尤其重要,因为即使能优化10%,背后的机器数量恐怕也不是一个可以忽略的数目。

说了这些,只是介绍现在的成因。但总体上,随着技术的发展,百花齐放应该是大趋势。选择合适的语言,在合适的场景,做合适的事情,这是大家逐渐认同的。而且很多尝试都在解耦,从库依赖变成服务间通信,这样更有助于不同语言共生。现在基本形成,高性能c/c++,灵活逻辑脚本化,运维工具Python,大数据用spark日志流用elk,旁路检索或查询用jvm系的局面

对开发人员而言,语言的要求慢慢从一招鲜变成了一专多能。唯一不变的是,业务需求永远在变,解决问题的技术就是好的技术

作者:小虫飞飞

给我留言

留言无头像?