开发语言的选择
业界主要的是c/c++ + Python/lua模式做游戏服务器。c/c++做网络通讯数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新。
当然,也有其他服务器开发语言,erlang(页游公司用的多),node.js(少量游戏用的,还有一个node.js写的引擎叫pemolo)
常见 MMORPG 服务器在技术层面的特性需求:
网络IO密集。高频率的视野同步消息(一般在 10-60Hz 之间),与玩家数量的关系是 O(n^2) 的复杂度,对于一些侧重国战等玩法的 MMORPG 尤其压力山大。通常都需要配合相关视野管理算法来减少消息发包数量,甚至需要配合架构做广播的负载分流。
CPU密集。MMORPG 的玩法规则都需要服务器做权威性的计算,简单些的也需要大量怪物的 AI 和寻路计算,以及实时战斗的逻辑和技能运算等等;一些先进的 3D MMORPG 服务器甚至整合了物理引擎,来做碰撞检测和校验。
实时性。此类游戏侧重实时战斗和交互体验,能容忍的响应延迟通常在 200ms 以内,即使可以通过客户端预演算进行缓和。考虑到网络延迟这个不能通过语言和架构来解决的要素,两次游戏逻辑更新发包的间隔最好控制在几十毫秒这一量级。(所以一些 GC 不太注重实时性的语言,可能会有潜在的负面体验影响)。
稳定性和容灾。常 Crash 的服务器,轻则影响玩家体验,重则导致公司倒闭。
开发效率。这个方面除了受语言特性本身影响,还需要考量其它要素,比如生态圈丰富程度(需要的功能可以容易找到稳定好用的库)、周边工具链完善程度、人员补充难易程度(是否是学校培训的主力语言、是否是领域比较主流的语言,或者是否足够简单好培训)、现有遗留人力和技术资源的价值等等。