课程简介
本课程为机械工业出版社出版的图书《百万在线:大型游戏服务端开发》的电子版。
第一部分:学以致用(第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开发环境 | 多线程、数据库、分布式 | 高并发、内存泄漏、热更新
第1.1节 百万在线:大型游戏服务端开发 ,我们简单介绍了从玩家的角度来看,一款网络游戏大都会涉及的流程,在此过程中,藏在幕后的服务端做了很多事情,那究竟做了哪些?此服务端系统又是如何开发的呢?
第1.2小节开发游戏服务端,从网络编程着手),服务端程序要承载很多玩家,性能是必须要考虑的问题。那么,1.2.4节的程序能够承载多少玩家同时在线呢?
1.3.1 单线事件模型
图1-11展示了1.2节程序的执行过程,无论何时服务端都是按顺序执行代码的。图中在时刻①,客户端A发送消息,服务端接收并处理。在①和②之间,服务端没有消息接收,进入等待状态。在时刻③客户端A和B同时发送消息,服务端收到后,先后执行。
有个专业术语叫“Reactor模型”,指的就是图1-11所示的程序执行方式,这里做个狭义的翻译——单线事件模型。“单线”指的是单线程,“事件”指的是事件触发,即当新连接、断开连接、收到数据这些事件到来时会触发某段代码。
图1-11 单线模型的时序图
1.3.2 承载量估算
要计算服务端系统的承载量,则要从CPU负载、内存占用、网络流量等多个角度考量,很难做到准确的估算,因为服务端运行在不同配置的物理机上,不同游戏类型的逻辑复杂度也不相同。但可以做个假设,假设在MMORPG中,玩家平均每3秒操作一次(走路、购物),服务端平均处理一条消息花费2毫秒。
从CPU的角度来看,同一时刻服务端只能处理一个客户端请求,按上述假设,服务端每秒可以处理500条消息,即最高可以承载1500人。
按经验推算,最高1000多人在线的游戏,日活跃用户(即每天登录的人数)大概是三五千。这种承载量对于多数独立游戏、小型手游是足够的。
知识拓展:尽管理论上CPU可以承载1000多人,但在实际情况中会低很多,而且这里只计算了CPU的负载,事实上,内存、网络流量也会对其有影响。“走路”程序受网络影响很大,因为玩家对服务端的响应速度有要求,总不能走一步等3秒钟后才有回应吧。如果不做进一步优化,广播的消息量与在线玩家则呈指数增长关系,通常这类单线程程序只能支持几十名玩家。
下一节,会继续讲解 用分布式扩能 的内容,完整版本可以前往UWA学堂查看。
适合读者
1、刚入行的服务端工程师
2、游戏公司开发岗位的求职者
3、对游戏开发感兴趣的高校学生
4、游戏开发爱好者
你将获得
1、充分了解业务逻辑和底层框架的设计意图
2、立足实践的服务端学习思路,深入浅出
3、用实际案例贯穿各知识点,在实践中学习
4、了解商业游戏的设计思路和实现方法