前言 第1章 网络编程基础1 1.1 单机游戏与网络游戏的区别1 1.2 理解IP地址4 1.3 理解TCP/IP5 1.4 阻塞式网络编程7 1.4.1 工程源代码7 1.4.2 服务端代码分析9 1.4.3 客户端代码分析13 1.4.4 系统差异14 1.4.5 网络底层函数说明14 1.4.6 小结17 1.5 非阻塞网络编程17 1.5.1 工程源代码18 1.5.2 服务端代码分析19 1.5.3 客户端代码分析21 1.5.4 小结23 1.6 总结24 第2章 网络IO多路复用25 2.1 Select网络模型25 2.1.1 ::select函数说明25 2.1.2 工程源代码27 2.1.3 网络基类:Network29 2.1.4 NetworkListen分析31 2.1.5 Server流程详解35 2.1.6 NetworkConnector分析37 2.1.7 测试流程详解39 2.1.8 ConnectObj分析41 2.1.9 Buffer分析42 2.1.10 RecvNetworkBuffer分析44 2.1.11 SendNetworkBuffer分析48 2.1.12 Packet分析50 2.1.13 小结55 2.2 Epoll网络模型55 2.2.1 函数说明56 2.2.2 源代码分析57 2.2.3 小结60 2.3 网络协议:protobuf61 2.3.1 在Windows下编译使用protobuf62 2.3.2 在Linux下编译使用protobuf64 2.3.3 使用protobuf定义协议66 2.4 总结69 第3章 线程、进程以及Actor模型70 3.1 游戏架构概述70 3.1.1 无服务端游戏70 3.1.2 单进程CS架构71 3.1.3 多进程CS架构71 3.2 框架瓶颈72 3.2.1 滚服游戏72 3.2.2 副本游戏73 3.2.3 大图分割空间游戏73 3.3 设计游戏框架74 3.4 游戏主循环76 3.5 理解进程和线程77 3.5.1 进程是什么77 3.5.2 线程是什么78 3.5.3 C++标准线程库79 3.6 Actor模型82 3.7 游戏框架中的线程84 3.7.1 包裹类ThreadObject85 3.7.2 线程类Thread85 3.7.3 线程管理类ThreadMgr86 3.7.4 libserver库与游戏逻辑88 3.8 Actor对象之间的消息处理机制92 3.8.1 消息定义原则93 3.8.2 消息队列机制94 3.9 总结99 第4章 账号登录与验证100 4.1 登录流程图100 4.2 制作一个简单的验证接口101 4.2.1 Nginx参考配置102 4.2.2 php-fpm参考配置103 4.3 导入PHP登录接口104 4.3.1 修改PHP中的数据库配置104 4.3.2 导入测试账号105 4.3.3 批量生成账号105 4.4 编码中用到的第三方库106 4.4.1 库libcurl106 4.4.2 库libjsoncpp107 4.5 账号验证代码分析108 4.5.1 定义登录协议号108 4.5.2 处理协议的Account类110 4.5.3 Account类如何放置到线程中110 4.5.4 处理验证的HttpRequestAccount类112 4.6 结果测试115 4.7 消息过滤机制116 4.8 测试机器人118 4.8.1 状态机119 4.8.2 状态机基类120 4.8.3 状态机管理类120 4.8.4 Robot类中的状态机122 4.9 批量登录测试125 4.10 总结126 第5章 性能优化与对象池127 5.1 Visual Studio性能工具127 5.2 内存中的数据结构131 5.2.1 交换型数据结构131 5.2.2 刷新型数据结构135 5.3 gprof137 5.3.1 gprof调用堆栈图138 5.3.2 让进程**退出139 5.3.3 用gprof工具查看框架141 5.4 valgrind145 5.5 对象池150 5.5.1 对象池代码分析150 5.5.2 使用cmd命令查看对象池154 5.6 总结155 第6章 搭建ECS框架156 6.1 一个简单的ECS工程156 6.1.1 组件类Component157 6.1.2 实体类Entity158 6.1.3 系统类System158 6.1.4 管理类EntitySystem159 6.1.5 测试161 6.2 基于ECS框架的libserver162 6.2.1 通过字符串动态创建类163 6.2.2 提供多参变量来创建实例168 6.2.3 EntitySystem的工作原理171 6.3 基于ECS框架的login和robots工程177 6.3.1 Account类177 6.3.2 动态创建组件或实例178 6.3.3 ECS框架下的网络通信185 6.3.4 执行效率188 6.4 YAML文件189 6.4.1 YAML编译安装189 6.4.2 读取YAML配置文件191 6.4.3 合并线程195 6.5 log4cplus日志197 6.5.1 log4cplus的编译安装197 6.5.2 配置文件198 6.5.3