站务联系

游戏开发之服务器技术选型浅析

发布时间:2021-03-10   来源:网络整理    
字号:

欲作此篇文章的看法由来已久,基本上,它是我因各类成因(被动)了解、接触并且使用了几个市面上相对而言较有知名度的开源的游戏服务器框架后的小结跟反省。

本文尽量客观,但不可避开或会有不少带个人偏好的观点与见解;而限于个人现在的能力学识及眼界,本文所述内容或仅用于当前阶段我的认知。

先摆个人观点一:不推荐例如 Pomelo 及 Skynet 等框架。

使用这类服务器框架的成因,主要无外乎实力大、能迅速出活(有不少样例),但,事实真如此么?

这两个框架无一例外,都是以脚本作为主要并且惟一的开发语言(JavaScript、Lua),不可避开的,脚本语言的缺点跟瓶颈在他们头上会被放大并且大大放大,尤其当服务器程序逻辑比较宽泛时/后。

静态类别检测、调试便利度(譬如 Skynet,调试?聊胜于无吧)、代码可读性、性能表现(譬如 Pomelo,其表现委实较多虽然有 V8 加持)、维护构建费用(脚本一时爽XXXXX 当然也是讽刺)...等等,这些都要谨慎考虑。

本质上,动态脚本也是胶带语言(JavaScript、Python纷纷表示强烈反对,毕竟语言特征丰富且各种库多如牛毛),或许,适度地在适宜的场合适量地使用他们更符合他们的设计定位。而例如 Skynet,虽然其寄主程序以 C 编写,但在使用上,它“鼓励”以 Lua 来撰写几乎所有的逻辑,当然,譬如某种功耗敏感的模块等,可以 C/C++ 编写动态库供其读取——麻烦么?有点。

印象里在 Skynet 的 wiki 里看见其作者解释为什么 Skynet 官方版本不支持 Windows,大意是因 Windows 的网路功耗不行——呵呵,这得有多大的并发多大的流量呢?IOCP 性能不行?。真考虑功耗,哪都会这么轻度的使用脚本?再考虑到或许大部分程序员的开发工作估计都在 Windows 下,需得先将脚本全部上传到 Linux 后服务器程序能够运行上去,不费时费事么?

Lua 在游戏行业的普遍使用,恐怕或多或少有 WOW 这一鲜活案例的成因。而国外大量使用脚本编撰游戏逻辑的开发方式,估计网易首创。slua 的作者说的好,“经过良好设计的游戏引擎,都是探讨过哪些应当引擎层做,什么应当脚本化”——服务器框架也同理。

我很难想像,譬如 WOW,若其服务器代码大部分并且绝大部分模块跟逻辑都要以 Lua 编写,该是如何的景色。

当然,如果仅仅练手或小游戏等,拿那些框架来让无可厚非,顺带能学习下其设计何种的——但估计也仅限这么了。譬如一些休闲类小游戏,技术要求原本就不高并且较低,与其去熟悉例如 Pomelo 等“较重”的框架,多研究多参考自己写一套也并非哪些难事,且更可控可订制,也更能提高水平经验。

至于稍为上规模或较复杂的游戏,几乎可以肯定,基本不会议使用这种服务器框架——譬如市面上热门或较有知名度的游戏,哪个使用了很多服务器框架?譬如各种大小游戏公司,有哪几家在用这种服务器框架?恩,Skynet 作者自己的公司在用,似乎畅游似乎在尝试 Pomelo(虽然网易自己都不用,其有自己的 MobileServer 引擎)。

基本上,正在使用或使用过这种游戏服务器框架的,几乎都是没哪些技术积累、技术水平还较通常的小公司小团队。譬如腾讯等,技术积累深厚,人才多,耍的是 C++ + Lua 之类。

或许,若日常工作主要都是撸脚本(譬如 Lua),对个人的成长影响是较负面的,即便仅仅螺丝钉,也不应仅局限于此。

再摆个人观点二:除却 C++,Go 是开发后台程序的神器。

当然也有 Java,虽然重了些游戏服务器,但其实资源多、人才大把,后端技术栈基于之断不失是个较实用的选择。

而 C++,恐怕在技术积累跟人才都不是问题的前提下才是较差的选择,而虽然可以判断的是,恐怕相当部份的小团队并且中小团队等,都不太具有这个能力。C++ 本身的复杂度、开发效率并且可靠的可选人才等,都是相当现实的问题。

图说天下

×
二维码生成