本身动手从零写mmo游戏服务器

不知不觉进入游戏行业工做已近一年,在这一年的时间里,除了繁忙的完成策划的逻辑需求,我也一直在思考一个问题:一个支持横向扩展的mmo游戏服务器,其底层实现究竟是怎样的呢?固然,既然都已经在公司待了近一年时间,对其架构和实现确定都是有必定了解了,可是没有具体实现过,永远都只是纸上谈兵,对其思考总不可能深刻。更况且造轮子是程序员的乐趣之一,还能够锻炼本身的技术能力,自由接触本身想接触的技术细节,何乐而不为呢?所以,深思良久,今天在此决定开一个《本身动手从零写mmo游戏服务器》的系列,用来记录本身从0开发的历程。程序员

技术选型

服务端使用C++作底层引擎开发语言,暴露接口给Python写逻辑层脚本,客户端使用Unity, C#搭建一个小场景,包括主角和一个大的平面,简单的用于验证服务端的功能便可。数据库

基础架构

服务端采用多进程架构,即流行的 多Gate + 多Game + n个单点管理进程(Manager),Gate相似于其余IT领域里的消息队列MQ,负责与玩家客户端的链接,将客户端的消息请求分发到玩家实体对应的Game进程;而Game负责游戏相关的逻辑计算,并将计算结果经过Gate发送到客户端。能够看到,Gate实际上充当了客户端与Game进程链接的一个代理Proxy,那为何客户端不直接链接到Game呢?这个后续再继续分析。除了核心的Gate + Game外,还须要有数个单点管理进程,主要用于跨Game间的通讯和全服的管理。json

技术点

显然,从零开始写游戏服务器,须要设计不少技术点,从最基础的网络通信到高层的mmo游戏基础逻辑(属性同步,RPC,AOI,位置同步策略...),咱们须要一一实现,在此我从底层到高层,将所需的技术点列一个表,从此的开发进度也围绕这个表进行,逐步完成咱们的游戏服务器。(该表可能会随着本身理解的加深不断补充变化)api

  • 基础网络通讯功能
    该部分不许备从0写起,准备基于boost.asio进行开发,主要是由于不想纠结于不一样平台的通讯api和模型,这种脏活累活既然已经有人帮咱们作了,那咱们就直接利用起来吧。另外为了快速搭建原型,暂时不去管复杂的网络情况,咱们假设网络是像局域网这样的优良网络,所以咱们直接选用TCP协议进行开发。服务器

  • RPC调用
    RPC是服务器间通讯的基本方式,实现RPC涉及到存根stub的自动生成方案,以及通讯协议的肯定,能够考虑json格式或者protobuf网络

  • Gate + Game的基础架构
    在以上基础上,搭建出Gate + Game的基础架构,实现客户端与服务端的通讯架构

  • 基础游戏逻辑
    包括属性同步、AOI、位置同步等等,走到这一步,一个mmo游戏服务器的demo就出来了设计

  • 其余功能
    包括数据库、寻路、场景划分等等,这些都是后话了代理

计划

目前计划每周更新一篇,记录开发进展和技术难点,开发进度视工做繁重程度而定。。。接口

相关文章
相关标签/搜索