网络多人游戏已经成为游戏产业的重要组成部分,本书是一本深入探讨关于网络多人游戏编程的图书。 全书分为13章,从网络游戏的基本概念、互联网、伯克利套接字、对象序列化、对象复制、网络拓扑和游戏案例、延迟、抖动和性、改进的延迟处理、可扩展性、安全性、真实世界的引擎、玩家服务、云托管专用服务器等方面深入介绍了网络多人游戏开发的知识,既又详尽地剖析了众多核心概念。 本书的多数示例基于C 编写,适合对C 有一定了解的读者阅读。本书既可以作为大学计算机相关专业的指导教程,也可以作为普通读者学习网络游戏编程的参考指南。
网络多人游戏是一个数十亿美元级的业务,其中的一些游戏吸引了数以千万计的玩家。在这本实用且代码丰富的指南中,作者将指导你完成多人游戏开发的各个方面,他们将带你构建一个具有健壮性的多人游戏架构,并创建各个引擎级的系统。你将通过深入的代码示例来学习两个完整的游戏:一个动作游戏和一个实时战略(RTS)游戏。 首先,本书从游戏开发zhe的角度回顾网络和网络编程的基本要素。接下来讲解管理游戏数据传输、通过网络更新游戏对象和组织加入游戏的设备。你将学习如何在互联网固有的不一致性前提下,确保的性能,以及如何设计游戏代码以实现zui大的安全性和可扩展性。zui后,本书以解决两个关键问题结束:结合玩家服务和将游戏托管在云端。 作者在美国南加州大学的多人游戏编程课程对本书的内容进行了广泛的测试,学生和正向网络游戏迁移的游戏开发zhe都会从中受益。 本书包括以下内容: 游戏如何进化以应对网络环境的挑战; 在游戏开发中使用互联网通信协议和标准; 使用多人网络游戏中广泛应用的Berkeley Socket; 规范游戏数据格式,实现高效的互联网传输; 同步状态,使得所有玩家共享同一个世界; 组织大型游戏的网络拓扑; 解决引起等待及数据丢失的延迟和抖动问题; 在不影响性能的前提下扩展游戏; 打击安全漏洞和软件作弊; 利用当前流行游戏引擎?D?DUnreal 4和Unity游戏引擎; 整合玩家服务,如比赛安排、成就和排行榜; 云端运行游戏服务器。
Joshua Glazer是Naked Sky Entertainment的CTO和创始人之一。Naked Sky Entertainment是一个游戏开发工作室,开发了很多游戏,如RoboBlitz、MicroBot、Twister Mania和手机端游戏Max Axe、Scrap Force。他为许多项目提供咨询,包括Epic Games公司的《虚幻引擎》(Unreal Engine)、Riot Games公司的《英雄联盟》(League of Legends)、THQ公司《毁灭全人类》(Destroy All Humans),还包括艺电(Electronic Arts)、Midway、微软(Microsoft)和派拉蒙电影公司(Paramount Pictures)等公司的很多项目。Joshua也是南加州大学(USC)的兼职讲师,讲授多人游戏编程和游戏引擎开发。 Sanjay Madhav是南加州大学(USC)的gao级讲师,讲授游戏编程、游戏引擎、数据结构和编译器知识。他在艺电(Electronic Arts)、Neversoft和Pandemic Studio做过开发zhe,涉足的游戏有《荣誉勋章:血战太平洋》(Medal of Honor: Pacific Assault)、《托尼霍克极限滑板8》(Tony Hawk’s Project 8)、《指环王:征服》(Lord of the Rings: Conquest)和《破坏者》(The Saboteur)等。他也是《Game Programming Algorithms and Techniques》的作者之一。
第1章网络游戏概述 1
1.1多人游戏的简要历程 1
1.1.1本地多人游戏 1
1.1.2早期网络多人游戏 1
1.1.3多用户网络游戏 2
1.1.4局域网游戏 3
1.1.5在线游戏 3
1.1.6大规模多人在线游戏 4
1.1.7移动网络游戏 4
1.2星际围攻:部落 5
1.2.1平台数据包模块 7
1.2.2连接管理器 7
1.2.3流管理器 8
1.2.4事件管理器 8
1.2.5ghost管理器 8
1.2.6移动管理器 9
1.2.7其他系统 9
1.3帝国时代 10
1.3.1轮班计时器 11
1.3.2同步 12
1.4总结 13
1.5复习题 13
1.6延伸的阅读资料 14
第2章互联网 15
2.1起源:分组交换 15
2.2TCP/IP模型 17
2.3物理层 18
2.4链路层 18
2.5网络层 22
2.5.1IPv4 23
2.5.2IPv6 36
2.6传输层 37
2.6.1UDP 38
2.6.2TCP 39
2.7应用层 48
2.7.1DHCP 49
2.7.2DNS 49
2.8NAT 50
2.9总结 56
2.10复习题 57
2.11延伸的阅读资料 58
第3章伯克利套接字 61
3.1创建Socket 61
3.2API操作系统差异 63
3.3socket地址 66
3.3.1类型安全 68
3.3.2用字符串初始化sockaddr 70
3.3.3绑定socket 73
3.4UDP Socket 74
3.5TCP Socket 79
3.5.1通过连接的socket实现发送和接收 80
3.5.2类型安全的TCP Socket 82
3.6阻塞和非阻塞I/O 84
3.6.1多线程 85
3.6.2非阻塞I/O 86
3.6.3Select 88
3.7其他Socket选项 92
3.8总结 94
3.9复习题 94
3.10延伸的阅读资料 95
第4章对象序列化 97
4.1序列化的需求 97
4.2流 100
4.2.1内存流 101
4.2.2字节存储次序的兼容性 105
4.2.3比特流 109
4.3引用数据 115
4.3.1内联或嵌入 116
4.3.2链接 117
4.4压缩 119
4.4.1稀疏数组压缩 120
4.4.2熵编码 121
4.4.3定点 123
4.4.4几何压缩 125
4.5可维护性 127
4.5.1抽象序列化方向 127
4.5.2数据驱动的序列化 129
4.6总结 132
4.7复习题 133
4.8延伸的阅读资料 134
第5章对象复制 135
5.1世界状态 135
5.2复制对象 135
5.2.1对象创建注册表 139
5.2.2一个数据包中的多个对象 143
5.3朴素的世界状态复制方法 144
5.4世界状态中的变化 148
5.5RPC作为序列化对象 155
5.6自定义解决方案 158
5.7总结 159
5.8复习题 160
5.9延伸的阅读资料 160
第6章网络拓扑和游戏案例 161
6.1网络拓扑 161
6.1.1客户端-服务器 161
6.1.2对等网络 163
6.2客户端-服务器的实现 165
6.2.1服务器和客户端的代码分离 166
6.2.2网络管理器和欢迎新客户端 167
6.2.3输入共享和客户端 172
6.3对等网络的实现 177
6.3.1欢迎新对等体和开始游戏 179
6.3.2命令共享和锁步回合制 181
6.3.3保持同步 187
6.4总结 192
6.5复习题 192
6.6延伸的阅读资料 193
第7章延迟、抖动和性 195
7.1延迟 195
7.1.1非网络延迟 195
7.1.2网络延迟 198
7.2抖动 199
7.3数据包丢失 201
7.4性:TCP还是UDP 202
7.5数据包传递通知 204
7.5.1标记传出的数据包 205
7.5.2接收数据包并发送确认 206
7.5.3接收确认并传递状态 211
7.6对象复制性 216
7.7模拟真实世界的条件 224
7.8总结 226
7.9复习题 227
7.10延伸的阅读资料 228
第8章改进的延迟处理 229
8.1沉默的客户终端 229
8.2客户端插值 231
8.3客户端预测 233
8.3.1航位推测法 236
8.3.2客户端移动预测和重放 238
8.3.3通过技巧和优化隐藏延迟 243
8.4服务器端回退 244
8.5总结 245
8.6复习题 246
8.7延伸的阅读资料 246
第9章可扩展性 247
9.1对象范围和相关性 247
9.1.1静态区域 248
9.1.2使用视锥 249
9.1.3其他可见性技术 250
9.1.4不可见时的相关性 252
9.2服务器分区 253
9.3实例化 255
9.4优先级和频率 255
9.5总结 256
9.6复习题 257
9.7延伸的阅读资料 257
第10章安全性 259
10.1数据包嗅探 259
10.1.1中间人攻击 259
10.1.2在主机上的数据包嗅探 262
10.2输入验证 263
10.3软件作弊检测 264
10.3.1维尔福反作弊系统 265
10.3.2典狱长反作弊系统 266
10.4保护服务器 267
10.4.1分布式拒绝服务攻击 267
10.4.2坏数据 267
10.4.3时序攻击 268
10.4.4入侵 269
10.5总结 270
10.6复习题 271
10.7延伸的阅读资料 271
第11章真实世界的引擎 273
11.1虚幻引擎4 273
11.1.1套接字和基本的网络体系 273
11.1.2游戏对象和拓扑 274
11.1.3Actor复制 275
11.1.4远程过程调用 276
11.2Unity 277
11.2.1传输层API 278
11.2.2游戏对象和拓扑 278
11.2.3生成对象和复制 279
11.2.4远程过程调用 279
11.2.5比赛安排 280
11.3总结 280
11.4复习题 281
11.5延伸的阅读资料 281
第12章玩家服务 283
12.1选择一种玩家服务 283
12.2基本设置 283
12.2.1初始化、运行和关闭 285
12.2.2用户ID和名称 286
12.3游戏大厅和比赛安排 287
12.4网络 291
12.5玩家统计 294
12.6玩家成就 299
12.7排行榜 300
12.8其他服务 302
12.9总结 303
12.10复习题 303
12.11延伸的阅读资料 304
第13章云托管专用服务器 305
13.1托管或不托管 305
13.2行业工具 306
13.2.1REST 307
13.2.2JSON 307
13.2.3Node.JS 308
13.3概述和术语 308
13.3.1服务器游戏实例 309
13.3.2游戏服务器进程 309
13.3.3游戏服务器 310
13.3.4硬件 311
13.4本地服务器进程管理器 311
13.5虚拟机管理器 318
13.6总结 327
13.7复习题 328
13.8延伸的阅读资料 328
附录A现代C 基础 329
对于任何有抱负的游戏程序员,推荐阅读这本书。Glazer和Madhav是解释多人游戏关键概念的zui佳人选。 ——Zach Metcalf,Rockstar Games和 USC Games Alum的游戏开发zhe