课程简介
本课程为机械工业出版社出版的图书《百万在线:大型游戏服务端开发》的电子版。
第一部分:学以致用(第1~4章),这部分介绍了Skynet引擎的使用方法及注意事项,以《球球大作战》的案例贯穿其中,全面又详尽地剖析了服务端结构设计、通信协议格式、数据表结构设计、断线重连等方案的核心技术。
第二部分:入木三分(第5~7章),这部分揭示了在多核时代采用现代C++编写多线程TCP网络服务器的高效做法,以C++重写Skynet的案例贯穿其中,使用大量图表,生动翔实地描述Linux环境下的编程技术。
第三部分:各个击破(第8~11章),这部分列举了同步算法、热更新、防外挂等实际工程难题,并对其逐一击破,非常具有实用价值。尽管本书以Skynet为例,但其同样适用于使用C++自研引擎的项目组,甚至是选用Erlang、Golang、Java的开发者。
关键词:
C/C++/Lua | Socket、TCP/IP、Protobuf | Linux开发环境 | 多线程、数据库、分布式 | 高并发、内存泄漏、热更新
完整版本,可以前往UWA学堂查看《百万在线:大型游戏服务端开发》。
1.1 每走一步都有事情发生
看着图1-1所示的游戏截图,想象一下,你即将制作这样一款MMORPG(多人角色扮演游戏),场景中有角色、NPC和小怪,玩家可以控制角色在场景中随意走动,可以和其他角色交互、打小怪。具体应该如何实现呢?
图1-1 游戏《仙境传说RO:守护永恒的爱》的截图
本章会以图1-1中的场景为起点,全面介绍游戏服务端涉及的技术。
1.1 每走一步都有事情发生
从玩家的角度来看,一款网络游戏大都会涉及如下流程:
1)打开游戏,客户端向服务端发起网络连接。
2)玩家输入账号密码,经过验证后,进入游戏场景。
3)操作交互,比如行走、打怪、购买道具等。
4)下线退出游戏。
在此过程中,藏在幕后的服务端做了很多事情,那究竟做了哪些?此服务端系统又是如何开发的呢?下面一起来看看。
1.1.1 走路的五个步骤
从玩家的视角来看,整个游戏系统如图1-2所示,多个客户端通过网络与服务端相连,服务端处理网络请求,存储角色数据。
图1-2 服务端像个黑盒子
说明:为了统一术语,本书中“玩家”代表玩游戏的人,“客户端”代表玩家接触的游戏程序,“角色”代表玩家控制的游戏角色。
客户端和客户端之间通过服务端间接通信。例如在MMORPG中,角色A移动一步,玩家B会在自己屏幕中看到角色A的位置变化,“走路”的背后至少发生了表1-1所示的5件事情。
表1-1 “走路”背后发生的事情
这5件事情如图1-3所示,其中标注的①到⑤分别对应表1-1中的各个步骤。
图1-3 位置同步的5个步骤
1.1.2 服务端视角的游戏流程
在服务端的“眼里”,“走路”只是它生命里的一小部分。游戏启动,每个客户端都会有连接、登录中、游戏中、登出中和退出五个阶段。如图1-4所示,图中纵轴代表客户端的状态,方框表示该状态下执行的操作。
连接阶段:客户端发起网络连接,双端可以通信,但服务端还不知道玩家控制的是哪个角色。
图1-4 服务端视角下的游戏流程
- 登录中:客户端发送登录协议,协议中包含账号、密码等信息,待检验通过后服务端会将网络连接与游戏角色对应起来,并从数据库中获取该角色的数据(比如金币数量),此后才算登录成功。
- 游戏中:双端互通协议,玩家可以移动、打怪、购买道具。1.1.1节介绍的位置同步就是发生在这个阶段。
- 登出阶段:玩家下线,服务端把角色的数据保存到数据库中。对于保存角色数据的时机,不同的游戏会有不同的处理方式。比如,有些游戏采用定时存储的方式,每隔几分钟把在线玩家的数据写回数据库;有些游戏采用下线时存储的方式,即只有在玩家下线时才保存数据。
了解了这些知识后,如果想开发一个游戏服务端,该从哪里着手呢?
下一节,会继续讲解 从网络编程着手 的内容,完整版本可以前往UWA学堂查看。
适合读者
1、刚入行的服务端工程师
2、游戏公司开发岗位的求职者
3、对游戏开发感兴趣的高校学生
4、游戏开发爱好者
你将获得
1、充分了解业务逻辑和底层框架的设计意图
2、立足实践的服务端学习思路,深入浅出
3、用实际案例贯穿各知识点,在实践中学习
4、了解商业游戏的设计思路和实现方法