作者: [日] 中嶋谦互
出版社: 人民邮电出版社
出版年: 2014-04
ISBN: 9787115349354
~~滚到底部有网盘下载链接~~
内容简介
本书围绕实时通信、大数据量通信的多人网络游戏开发,详细介绍了普通开发者如何在不使用昂贵的中间件或者特殊开发环境的基础上,独自从零开始实现有趣的多人网络游戏系统,并讲解了C/S MMO游戏和P2P MO游戏这两个典型的开发案例。同时还从游戏运营和基础设施架构等角度,展现了支持网络游戏技术的全貌。
作者简介:
中嶋谦互
从小学开始学习游戏编程,进入大学后正式参与游戏开发。1996年开发了世界上第一款使用Java Applet的MMORPG,1998年在Windows平台发布后续版本Lifestorm系列,大受欢迎。2001年研发了开发在线游戏的中间件VCE,包括自己开发的gumonji在内,有大约50家公司使用该工具。目前已是两个孩子的父亲,在抚养孩子的同时继续从事开发工作。
译者简介:
毛姝雯(译者)
现任职于IBM。对游戏设计和开发有着浓厚兴趣,对UI设计也有一定研究。译著《iOS用户体验设计》,合译《iOS 5基础教程》。
田剑(译者)
资深游戏开发工程师,曾在日本东京OptiMedia株式会社工作4年,游戏开发实战经验丰富。目前就职于D2C China。对于移动互联网行业新趋势、新技术有强烈兴趣。目前专注于iOS、Android和Windows Phone等移动平台的游戏开发。
作者简介:
中嶋谦互
从小学开始学习游戏编程,进入大学后正式参与游戏开发。1996年开发了世界上第一款使用Java Applet的MMORPG,1998年在Windows平台发布后续版本Lifestorm系列,大受欢迎。2001年研发了开发在线游戏的中间件VCE,包括自己开发的gumonji在内,有大约50家公司使用该工具。目前已是两个孩子的父亲,在抚养孩子的同时继续从事开发工作。
译者简介:
毛姝雯(译者)
现任职于IBM。对游戏设计和开发有着浓厚兴趣,对UI设计也有一定研究。译著《iOS用户体验设计》,合译《iOS 5基础教程》。
田剑(译者)
资深游戏开发工程师,曾在日本东京OptiMedia株式会社工作4年,游戏开发实战经验丰富。目前就职于D2C China。对于移动互联网行业新趋势、新技术有强烈兴趣。目前专注于iOS、Android和Windows Phone等移动平台的游戏开发。
目录
前言
关于本书
案例游戏和视频录像
案例游戏的运行环境
关于通信中间件 VCE
使用须知 ※ 请仔细阅读 ※
本书附加信息
致谢
专业术语
第 0 章 [快速入门]网络游戏编程:网络和游戏编程的技术基础
0.1 网络游戏开发者所需了解的网络编程基础
0.1.1 网络编程是必需的
0.1.2 网络编程与互联网编程
0.1.3 互联网编程的历史和思想
0.1.4 OSI 参考模型——透明地处理标准和硬件的变化
0.1.5 网络游戏系统及其层次结构
第 4 层大多使用 TCP 协议、不需要直接操纵第 3 层以下的分层
第 5 层以上的分层需要在游戏中予以实现
0.1.6 套接字 API 的基础知识
0.1.7 网络游戏和套接字 API——使用第 4 层的套接字 API
面向连接(流式)和无连接(数据报式)
专栏 网络编程的特性和游戏架构的关系——服务器、客户端所需具备的性能和功能
0.2 套接字编程入门——处理多个并发连接、追求性能
0.2.1 通信链路的确定(复习)
0.2.2 套接字 API 基础——一个简单的 ECHO 服务器、ECHO 客户端示例
0.2.3 TCP 通信链路的状态迁移和套接字 API
0.2.4 处理多个并发连接——通向异步套接字 API 之路
0.2.5 同步调用(阻塞)和线程
线程方式下的负载处理问题
0.2.6 单线程、非阻塞、事件驱动——使用 select 函数进行轮询
0.2.7 网络游戏输入输出的特点——单线程、事件驱动、非阻塞
0.2.8 网络游戏和实现语言
0.2.9 充分发挥性能和提高开发效率——从实现语言到底层结构
网络游戏的特殊性所造成的编程语言性能差异
0.2.10 发挥多核服务器的性能
专栏 输入输出的实现方针和未来提高性能的可能性
上下文切换——保存 CPU 的设置状态
多核处理器上不要运行过多的服务器进程
0.2.11 多核处理器与网络吞吐量——网络游戏与小数据包
以太网帧
各个网络层的头信息
多核处理器的数据传输能力
0.2.12 简化服务器实现——libevent
libevent 的特点
0.3 RPC 指南——最简单的通信中间件
0.3.1 通信库的必要性
确定数据格式来进行数据的收发
0.3.2 网络游戏中使用的 RPC 的整体结构
自动生成 RPC 存根代码的 RPC 工具
网络游戏和二进制数据交换格式/库
0.3.3 [补充]UDP 的使用
0.4 游戏编程基础
0.4.1 游戏编程的历史
0.4.2 采用“只要能画点就能做出游戏”的方针来开发入侵者游戏
0.4.3 游戏编程的基本剖析
初始化
无限循环
各个 Sprite 的行为——游戏逻辑主体
绘制
子过程
0.4.4 游戏编程精粹——不使用线程的“任务系统”
0.4.5 两种编程方法的相似性——不使用线程
0.5 小结
专栏 确保开发效率和各平台之间的可移植性
提高开发效率
使用封装保持源代码级的兼容性
降低 OS 差异性的封装工作
第 1 章 网络游戏的历史和演化:游戏进入了网络世界
1.1 网络游戏的技术历史
1.1.1 网络游戏出现前的 50 年
1.1.2 20 世纪 50 年代前:计算机诞生
1.1.3 20 世纪 50 年代:早期的电子游戏
1.1.4 20 世纪 60 年代:各种颇具影响的机器登上历史舞台
1.1.5 20 世纪 70 年代:网络游戏的基本要素
1.1.6 20 世纪 80 年代:网络对战游戏登场
1.1.7 20 世纪 90 年代:游戏市场扩大
1.1.8 本世纪前 10 年的前期:网络游戏商业化
1.1.9 本世纪前 10 年的后半期:基于 Web 浏览器的 MMOG 在商业上获得成功
1.1.10 2010 年之后:究竟会出现怎么样的游戏呢?
1.2 从技术变迁看游戏文化和经济圈
1.2.1 解读技术发展图
1.2.2 3 个圈(三大范畴)
黑客文化圈
电视游戏 / 街机游戏商业圈
微软圈
1.2.3 两个游戏经济/文化圈
1.2.4 文化、经济与技术的关系
1.3 小结
专栏 成为出色的网络游戏开发程序员的条件
第 2 章 何为网络游戏:网络游戏面面观
2.1 网络游戏术语的定义
网络游戏的 4 个层面
2.2 网络游戏的物理层面
2.2.1 物理构成要素
2.2.2 物理模式 / 物理上的网络构成
本书中的物理线路是基于互联网的
2.3 网络游戏的概念层面
2.3.1 网络游戏及其基本结构
游戏的基础——认知、判断、操作的重复
电子游戏的结构
2.3.2 游戏进行空间——进行游戏时所需的所有信息
2.3.3 游戏的进展——游戏进行空间的变化
2.3.4 共享相同的游戏进展
可以进行共享
2.4 网络游戏的商业层面
2.4.1 商业层面的要求
2.4.2 有效地招募测试玩家——网络游戏与测试
封闭测试(CBT)
公开测试(OBT)
2.4.3 不断更新——网络游戏的运营和更新
2.4.4 节约服务器数量和带宽——网络游戏开支的特殊性
服务器成本的预估——估算服务器损坏的概率
线路成本的预估——尽可能节省带宽
2.4.5 从小规模开始,确保可扩展性——将风险降到最低,不要错过取胜的机会
2.4.6 提供多种收费方式——收费结算方式的变化
游戏点数的出现——实现了收费的细分化、实时化
2.4.7 低价、快速地根除攻击者——攻击、非法行为及其对策
商业目的的攻击
非商业目的的攻击——各种攻击方式,3D 网络游戏专用的客户端
2.4.8 减少服务器停止的次数和时间——不要让玩家失望
2.4.9 反馈游戏结果——日志分析和结果的可视化
游戏的元信息
2.4.10 更容易地与其他玩家相遇——玩家匹配
专用游戏大厅和虚拟世界的区别
未来的玩家匹配
2.5 网络游戏的人员和组织
2.5.1 与网络游戏服务的运营相关的人员
3 种职责以及分配方式
2.5.2 网络游戏服务运营的 3 项专门职责
2.5.3 开发团队
不可或缺的 4 种职业
小型团队
大型团队
从职责平衡来看游戏开发的特点——数据制作人员的比例
2.5.4 运维团队
服务器设备
2.6 网络游戏程序员所需的知识
2.6.1 网络游戏程序员所需的技术和经验
编程的基本技术
游戏编程的基础知识(对网络游戏的开发是必需的或者有用的知识)
游戏客户端开发的知识
数据库知识
系统运维知识
2.6.2 各种网络游戏开发知识
2.7 支持网络游戏的技术的大类
支持网络游戏的技术的 4 种形式
C/S 架构和 P2P 架构——物理结构的两种典型模式
MMO 架构和 MO 架构——逻辑结构的两种典型模式
网络游戏的 4 种形式——物理结构 × 逻辑结构
2.8 影响开发成本的技术要素
2.8.1 网络游戏与如今的开发技术
2.8.2 支持网络游戏主体的 3 大核心
游戏的数据形式
游戏的通信方式
游戏的反应速度
2.9 小结
专栏 网络游戏编程的最大难点——解决冗余和异步的问题
第 3 章 网络游戏的架构:挑战游戏的可玩性和技术限制
3.1 游戏编程的特性——保持快速响应
3.1.1 响应速度的重要性——时间总是不够的
3.1.2 将数据存放在内存中的理由——游戏编程真的有三大痛苦吗
3.1.3 每 16 毫秒变化一次——处理的信息及其大小
表现游戏进程所需的信息及其大小
可以用 RDBMS 实现吗?——与在内存中存放数据进行比较
3.1.4 大量对象的显示——CPU 的处理能力
家用游戏机与 CPU 周期
PlayStation 3(PS3)与 CPU 周期——可以用 RDBMS 来开发吗
3.1.5 无法预测玩家的操作——游戏状态千变万化
3.1.6 必须将游戏数据放在 CPU 所在的机器上
3.2 网络游戏特有的要素
3.2.1 通信延迟——延迟对游戏内容的限制
传输时间的具体内容
无法避免的延迟——延迟与游戏类型
3.2.2 带宽——传输量的标准
3.2.3 服务器——成本、服务器数量的估算
3.2.4 安全性——网络游戏的弱点
作弊——最大的安全隐患
为什么要作弊
作弊行为的手段
作弊的操作对象
冯诺依曼型计算机的宿命——防止作弊行为的服务
恐怖……作弊行为的影响
3.2.5 辅助系统(相关系统)
3.3 物理架构详解——C/S 架构、P2P 架构
3.3.1 基本的网络拓扑结构
实际使用的有星型(和总线型)、全网状结构——把通信延迟降至最低
3.3.2 物理架构的种类
3.3.3 C/S 架构——纯服务器型、反射型
反射型
3.3.4 P2P 架构
NAT 穿透
3.3.5 C/S + P2P 混合型架构
3.3.6 ad-hoc 模式
专栏 游戏客户端是什么
3.4 逻辑架构详解——MO 架构
3.4.1 MO、MMO 是什么?——同时在线数的区别
MMO 和 MO 的混合
3.4.2 MO 架构、MOG
3.4.3 同步方式——获得全体玩家的信息后,游戏才能继续
3.4.4 同步方式 / 全网状结构的实现——所有终端都拥有主数据
各终端(玩家)收发的信息内容
同步方式 / 全网状结构的必要条件和优势
同步方式 / 全网状结构的 3 个问题——通信网和收发信息在完整性上较为脆弱、中途加入游戏
传输线路的可靠性
最慢的终端会拖长整体的传输时间
3.4.5 同步方式 / 星型结构——暂时将输入信息集中到服务器上
星型结构的 4 个问题
同步方式不可避免的重大问题——不能中途加入游戏
同步方式的优势和问题解决的方法
3.4.6 异步方式——接受各终端上游戏状态的不一致
异步方式下实现方针的制定方法——对游戏内容的详细分析是不可缺少的
3.4.7 三大基本要素:自己、对手、环境——异步实现的指导方针
三大要素之间的关系
3.4.8 ❶ 自己和对手——对战游戏和玩家之间往来数据的抽象程度
格斗游戏的例子
攻击、防御、碰撞检测
格斗游戏的时序图
必须发送抽象度较低、表示原因的数据——对结果的接纳感
可能产生不一致的结果!
3.4.9 保持结果一致性的方法——两种覆盖方式
采用造成伤害的那一方的结果
采用受到攻击的那一方的结果
对这两种方式进行选择的原则——增加玩家的总体满意度
3.4.10 ❷ 自己和环境——可使用物品的格斗游戏和互斥控制
需要互斥控制的环境要素——互相竞争的资源“炸弹”
不需要互斥控制的环境要素——不会减少的资源“水”
游戏中的环境要素极难处理——必须详细理解游戏内容
3.4.11 互斥控制的实现——采用与同步方式类似的机制来实现异步方式
物品复制问题
给物品赋予唯一的 ID——判断物品是否被复制,发生的问题
物品复制的解决对策——由专门的软件负责协调
协调软件的基本功能和使用方法
炸弹以外的环境要素
3.4.12 状态会自动变化的环境——静态环境和动态环境
动态环境引起的问题——很难完全并行管理
解决动态环境所引起的问题的几种选择方案
3.4.13 ❸ 对手和环境的关系
3.5 逻辑架构详解——MMO 架构
3.5.1 MMO 架构、MMOG——在大量玩家之间共享长期存在的游戏过程
什么是持久?——游戏所需的时间和积累性
保证持久性数据、不断累积的大量数据的一致性的难度
客户端和服务器的完全分离
3.5.2 MMOG 的结构
MMO 架构的实现方针——浏览器方式、纯粹的 C/S 模式
浏览器方式、同步方式和异步方式的差异
MMO 架构中服务器、客户端的功能
服务器端处理——游戏在服务器上持续运行
3.5.3 大型多人网络游戏(MMO)
3.6 小结
专栏 设法改善网页游戏的画面显示间隔
第 4 章 [实践]C/S MMO游戏开发:长期运行的游戏服务器
4.1 网络游戏开发的基本流程
4.1.1 项目文档 / 交付物
同时进行开发之前的准备和初期实现
4.1.2 开发的进行和文档准备的流程
4.1.3 技术人员的文档 / 交付物
4.2 C/S MMO 游戏的发展趋势和对策
4.2.1 C/S MMO 游戏的特点
4.2.2 C/S MMO 架构(MMO 架构)特有的游戏内容
C/S MMO 架构的限制
4.3 策划文档和 5 种设计文档——从虚构游戏 K Online 的开发中学习
4.3.1 考虑示例游戏的题材
4.3.2 详细设计文档
详细设计文档的必要性
4.3.3 MMOG 庞大的游戏设定
4.3.4 5 种设计文档
4.3.5 设计上的重要判断
4.4 系统基本结构图的制定
4.4.1 系统基本结构图的基础
4.4.2 服务器必须具有可扩展性——商业模式的确认
4.4.3 各种瓶颈——扩展方式的选择
专栏 MMO 客户端特有的渲染性能瓶颈——游戏客户端的瓶颈
4.4.4 解决游戏服务器 / 数据库的瓶颈
4.4.5 什么都不做的情况(1 台服务器负责整个游戏世界)
4.4.6 空间分割法——解决游戏服务器的瓶颈
空间复制
4.4.7 实例法——解决游戏服务器的瓶颈
4.4.8 平行世界方式——解决数据库瓶颈
最容易产生瓶颈的是数据库写入操作
平行世界方式下的数据库分割
平行世界方式引起的问题
4.4.9 同时采用多种方法——应对越来越多的玩家
4.4.10 各种方式的引入难度
4.4.11 各个世界中数据库(游戏数据库)服务器的绝对性能的提高
应用层面的技巧
4.4.12 K Online 的设计估算——首先从同时在线数开始
瓶颈的确认
设计估算的思考原则
4.4.13 根据游戏逻辑的处理成本来估算——敌人的行动算法需要消耗多少 CPU
4.4.14 根据游戏数据库的处理负荷进行估算——找到“角色数据的保存频率”与“数据库负荷”的关系
4.4.15 可扩展性的最低讨论结果,追求进一步的用户体验
4.4.16 服务器的基本结构,1制定系统基本结构图
4.5 2进程关系图的制定
4.5.1 2进程关系图的准备
4.5.2 服务器连接的结构——只用空间分割法
4.5.3 服务器连接的结构——使用平行世界方式和空间分割法
4.5.4 使用平行世界方式进行扩展的关键点
4.6 带宽 / 服务器资源估算文档的制定
4.6.1 以进程列表为基础估算服务器资源
4.6.2 以 CPU 为中心的服务器和以存储为中心的服务器
4.6.3 服务器资源的成本估算——首先从初期费用开始
服务器资源的维护成本
4.6.4 带宽成本的估算
98% 的传输量用于玩家和 NPC 的移动通知
4.6.5 带宽减半的方针——首先是调整策划,然后在程序上下功夫
策划的调整——带宽降低方案1
在程序上下功夫——带宽降低方案2
4.6.6 策划内容的分析对带宽的降低很有效
4.7 4协议定义文档的制定——协议的基本性质
4.7.1 4协议定义文档基础
4.7.2 “协议的基本性质”的要点
4.7.3 协议的种类、以及进程之间关系的种类
4.7.4 8 种类型的协议
4.7.5 C/S MMO 采用 TCP
4.7.6 与“协议的基本性质”的对应
协议设计的基本策略
4.8 4 协议定义文档——协议的 API 规范(概要)
4.8.1 协议的实现原则
后端实现基本的、通用的功能,前端实现专用功能
前端依赖于后端的结构
协议是无状态和简单操作的集合
在一个地方接受外部的异常状况
优秀的 API 的调用时序——不调用才好吗
4.8.2 8 种协议的功能 / 形式概述
gmsv 协议
loginsv 协议
msgsv 协议
dbsv 协议
worldsv 协议
commondbsv 协议
authsv 协议
logsv 协议
4.9 4 协议定义文档——协议的 API 规范(详细)
4.9.1 协议 API 规范(详细)的制定
4.9.2 API 的函数定义
gmsv 协议
API 的类型和消息的特性
loginsv 协议
msgsv 协议
dbsv 协议
worldsv 协议
commondbsv 协议
authsv 协议
logsv 协议
4.9.3 常量定义
4.9.4 API 的调用时序
必要的时序图——关系到多个进程的典型处理是什么
复杂性尽可能集中在网络的终端,也就是 cli 侧
向在线好友发送消息
4.9.5 时序图制定的要点
4.10 4协议定义文档——数据包的格式
4.10.1 C/S MMO 主要采用 TCP(复习)
4.10.2 C/S MMO 使用包含专用字节数组的二进制协议
4.10.3 二进制协议的实现——首先从术语的整理开始
记录的大小
报文头
数据部分的压缩和加密
实现上的要领
专栏 C/S MMO 的压缩和加密
4.11 5数据库设计图
4.11.1 要在编程之前进行对重要的表进行设计
4.11.2 C/S MMO 中的数据库实现的历史变迁
20 世纪 70~80 年代:没有数据持久化,复活咒语
20 世纪 90 年代:保存在文件中
本世纪初前期~:RDBMS
4.11.3 整理 K Online 所需的表
专栏 百花缭乱的 KVS——未来 C/S MMO 中数据库的使用情况
需要持久化的信息以及数据的包含关系
数据的特性和各个表的准备
4.11.4 数据库性能预测
表的特性、必须注意的表
查询的内容——read 篇
查询的内容——write 篇
4.12 服务器 / 客户端软件 + 中间件——实践中不可或缺的开发基础
4.12.1 网络游戏的中间件
C/S MMO 中间件
全功能型中间件
小规模型 MMOG 中间件
通信中间件
4.12.2 开发的基础软件——可以立刻尝试的 C/S MMO 开发体验
客户端相关的软件
4.13 程序开发中的基本原则
4.13.1 如何开始编程、如何继续编程
4.13.2 数据结构优先原则——基本原则1
视频游戏中的数据分类
4.13.3 实现数据结构之前的讨论——出现在画面上和不出现在画面上的元素
敌方角色和 POP 设定
4.13.4 维持可玩状态的原则——基本原则2
4.13.5 后端服务器的延后原则——基本原则3
4.13.6 持续测定的原则——基本原则4
客户端开发中持续测定的例子
服务器开发中的持续测定
4.14 C/S MMO 游戏 K Online 的实现——编程开始!
4.14.1 开发的安排
4.14.2 K Online 中的分工计划
4.14.3 K Online 中“框架阶段”和“原型阶段”的区别
4.14.4 [ 步骤 1~2] 框架~原型阶段
框架代码的准备
1 autocli
2 cli
专栏 每一步的进度管理形式
3 协议
4 ID
5 gmsv
6 dbsv
4.14.5 “不实际运行起来是不会理解的!”——游戏开发的特殊性
典型的失败——企业中的网络游戏开发
专栏 C/C++ 以外的语言
4.14.6 框架的整体结构
cli 中的文件
专栏 VCE 是什么
gmsv、dbsv、proto 中的文件
4.14.7 以怎样的顺序来编写代码
4.14.8 首先编写协议定义文件 k.xml——开发流程1
4.14.9 协议定义的要点
4.14.10 通信连通确认:ping 函数
4.14.11 账户登录和账户认证:signup 函数、authentication 函数
4.14.12 角色创建:createCharacter 函数
4.14.13 登录:login 函数
4.14.14 在地面上移动:move 函数、moveNotify
以方格为单位
路径搜索和实际的移动处理
移动路径的发送方式——优先发送最终结果
移动结果的通知范围
moveNotify 函数
attack 函数、attackNotify 函数
4.14.15 编写 gmsv/Makefile——开发流程 2
4.14.16 从示例中复制 gmsv/climain.cpp 和 gmsvmain.cpp——开发流程 3
在 sv.cpp 中实现 signup 函数
“dbsv1 次往返”的请求和线程
专栏 dbsv 服务器代码的自动生成——后端服务器实现的简化
4.14.17 自动测试客户端 autocli 的实现——开发流程 4
测试的状态迁移
autocli 的 main() 函数
signup() 函数
专栏 gmsv 中线程的使用
4.14.18 图形客户端 cli 的创建和运行确认——开发流程
SDL
绘制图形
运行确认
实现字体的显示
出现敌人、追赶敌人
打倒敌人,获得经验值
确保以后可以继续进行游戏——游戏状态的保存
4.14.19 框架之后的开发——开发流程、后续事项
4.15 总结
第 5 章 [实践] P2P MO游戏开发:没有专用服务器的动作类游戏的实现
5.1 P2P MO 游戏的特点和开发策略
5.1.1 P2P MO 和动作类游戏——游戏的状态频繁发生改变
5.1.2 RPC 和共享内存
5.1.3 P2P MO 游戏的特点——和 C/S MMO 游戏的比较和难点
5.1.4 P2P MO 游戏的优点
5.1.5 从概要设计开始考虑[多人游戏模式]
5.2 J Multiplayer 游戏开发案例的学习——和 K Online 的不同
5.2.1 J Multiplayer ——和 K Online 的比较
5.2.2 P2P MO 游戏开发的基本流程
5.2.3 P2P MO 游戏开发的交付产品——开发各个阶段需要提交的资料
概要设计的详细资料
5.2.4 和 C/S MMO 的数据量/规模的比较
5.3 P2P MO 游戏的设计资料
5.3.1 系统基本结构图
5.3.2 进程关系图
星状拓扑结构还是网状拓扑结构
首先来验证星状拓扑结构
中途加入游戏的实现
5.3.3 带宽 / 服务器资源计算资料
5.3.4 通信协议定义资料和 API 规格
通信协议的序列图
函数和常量的定义
专栏 什么是“游戏逻辑”
5.3.5 带宽消耗量的估算
“1/600”的实现方法——仔细检查游戏设计寻找解决方案
5.3.6 其他资料
5.4 客户端 / 服务器软件 + 中间件、基本原则
5.4.1 P2P MO 开发的最终交付产品
5.4.2 P2P MO 中使用的中间件
5.4.3 编程时应该注意的基本原则——针对 P2P MO 游戏
5.5 P2P MO 游戏 J Multiplayer 的实现——正式开始编程
5.5.1 J Multiplayer 的编程计划
5.5.2 开发流程——K Online 的回顾
5.5.3 J Multiplayer 开发阶段——开发顺序和内容
5.5.4 第 1 阶段的要点
5.5.5 客户端程序的开发案例
5.5.6 “共享内存方式”的实现——开始编码
竞争状态——共享内存方式的注意点
加锁处理
P2P MO 和竞争状态
5.5.7 P2P MO 游戏开发中该如何防止发生竞争状态
同步处理的实现例子
可动物体的枚举类型和类的设计
基本操作的矩阵
修改游戏进行状态相关处理的规范
玩家角色的处理规范
敌人的处理规范——Enemy/Create
子弹的处理规范
5.5.8 共享内存开发方式该如何编码——共享内存开发方式和 RPC 开发方式的比较
RPC 开发方式——C/S MMO 游戏
共享内存开发方式——P2P MO 游戏
RPC 开发方式的代码量——move(5, 5)
共享内存开发方式的代码量——move(5, 5)
共享内存开发方式的优缺点
[ 补充 ] 你会进行代码清洁工作吗?
5.5.9 SyncValue 类
专栏 数据中心的地理位置分布
5.6 支持 C/S MO 游戏的技术 [ 补充 ]
5.6.1 C/S MO 和 NAT 问题
5.6.2 什么是 NAT 问题
5.6.3 NAT 遍历——解决 NAT 问题建立通信路径的技术
NAT 遍历技术的限制
使用 NAT 遍历技术的其他缺点
5.6.4 NAT 问题的实际解决方法
5.6.5 中继服务器
5.6.6 中继服务器的折衷方案
5.7 总结
第 6 章 网络游戏的辅助系统:完善游戏服务的必要机制
6.1 辅助系统需要的各种功能
6.1.1 现有服务提供的辅助系统功能
通用
面向游戏主机的服务
面向网页游戏的服务
现有中间件
6.1.2 现有服务的功能一览
6.1.3 网页游戏开发方法和客户端游戏的开发方法
6.2 交流 / 通信功能
6.2.1 玩家匹配 P2P MO
P2P MO 游戏中多人游戏需要满足的条件
玩家匹配服务器
满足多人游戏的两个条件的具体做法——J Multiplayer 游戏
满足多人游戏的两个条件的实现——J Multiplayer 游戏
匹配结果画面
6.2.2 游戏大厅 P2P MO
游戏大厅和匹配
《星际争霸 2》(StarCraft II )的例子
开发要点
6.2.3 中继服务器 P2P MO
中继服务器需要的性能
6.2.4 聊天 P2P MO C/S MMO
聊天功能的实现
聊天功能的基本处理
同步发送消息的规模
6.2.5 邮件 P2P MO C/S MMO
6.2.6 好友列表 P2P MO C/S MMO
6.2.7 玩家状态 P2P MO C/S MMO
游戏中的玩家状态服务的特点
玩家状态服务的实现
6.2.8 加锁服务器 P2P MO C/S MMO
加锁服务器的实现
6.2.9 黑名单 P2P MO C/S MMO
黑名单功能的实现
6.2.10 语音聊天 P2P MO C/S MMO
6.3 游戏客户端实现相关的辅助系统
6.3.1 玩家成绩管理 P2P MO C/S MMO
玩家成绩管理的实现
6.3.2 存储功能 P2P MO
6.3.3 (游戏客户端)更新 P2P MO C/S MMO
更新的基本功能
更新和访问模式
自己开发更新功能
6.3.4 排行榜 P2P MO C/S MMO
排名功能的实现——网络游戏特有的需求
临时排名法
6.4 运营辅助系统
新闻发布 P2P MO C/S MMO
新闻发布的机制
6.5 付费相关的辅助系统
6.5.1 付费认证 P2P MO C/S MMO
网络游戏的付费
付费的机制
支付的序列图
使用充值服务的好处
6.5.2 虚拟货币管理 P2P MO C/S MMO
P2P MO 游戏和 C/S MMO 游戏
虚拟货币管理服务器的实现
虚拟货币管理的注意点
专栏 C/S MMO 游戏的收入
6.6 其他辅助功能
6.6.1 游戏数据浏览/查询工具 P2P MO C/S MMO
游戏数据的保存状态
不是很清晰的保存状态时
选择可以阅读的形式
关键词查询
游戏的设定数据和数据库
6.6.2 敏感词过滤 P2P MO C/S MMO
6.7 本章小结
第 7 章 支持网络游戏运营的 基础设施:架构、负荷测试和运营
7.1 基础设施架构的基础知识
7.1.1 C/S MMO 和 P2P MO 的基础设施(概要)
7.1.2 基础设施架构需要进行的工作 ——从开发整体来看
7.1.3 基础设施的成本估算
7.1.4 成本的概念、单位
7.1.5 网络游戏服务器在一定程度上可以接收的条件
7.1.6 硬件、信息设备
服务器
存储设备
网络交换机
路由器 / 防火墙
7.1.7 软件
服务器操作系统
数据库管理系统
杀毒软件
虚拟化软件
7.1.8 数据中心相关的成本
数据中心建设费
7.1.9 服务费(数据中心以外)
服务器监控服务
域名使用费、电子签名服务费
7.1.10 网络带宽费
7.1.11 电费
7.2 开发者需要知道的基础设施架构技巧
7.2.1 服务规模的扩大 / 缩小——用户数和需要的基础设施规模
7.2.2 典型的环境
不容易估算的条件
7.2.3 负荷曲线
最初的设计需要考虑峰值的应对
K Online
J Multiplayer
7.2.4 面向开发者的基础设施架构要点
7.2.5 服务器部署
维护时间和自动化发布
7.2.6 登台环境
网络游戏的特殊注意点
7.2.7 服务器的监控、生死监控
7.2.8 日志输出 / 管理
日志保留的策略——“尽可能保留所有日志”并且“原因和结果都保留”
日志输出方法——推荐的组合、syslog 的问题
日志服务器
7.3 K Online 、J Multiplayer 游戏的基础设施架构
7.3.1 K Online 的基础设施
Alpha 测试
封闭 Beta 测试
公开 Beta 测试
7.3.2 J Multiplayer 的基础设施
自己开发部分辅助系统
首先进行负荷测试、估算基础设施
同时在线数和注册用户数——排行榜的典型负荷测试步骤
预测玩家的游戏方式——排行榜的典型负荷测试步骤
根据测试结果修改设计
7.4 负荷测试
7.4.1 负荷测试的准备
7.4.2 K Online 在生产环境的负荷测试
测试的分解
负荷测试需要的环境
7.4.3 负荷测试时使用的服务器监控命令
vmstat、/proc/interrupts
ps
top
netstat
7.4.4 J Multiplayer 在生产环境下的负荷测试
J Multiplayer 的测试场景
负荷测试必要的测试环境
7.5 游戏上线
7.5.1 游戏上线前——从确认安全设定开始
防止系统外部攻击的安全设定
和系统内部管理相关的安全设定
7.5.2 游戏上线后 ——系统监控
7.5.3 服务器的组群化
7.5.4 故障发生时的应对
7.6 本章小结
第 8 章 网络游戏的开发体制:团队管理的挑战
8.1 游戏的策划内容和开发团队 网络游戏特有的挑战
8.1.1 游戏的策划内容是团队管理的关键
8.1.2 游戏数据的持久化
运营刚开始的 3 个月最困难,运营可以持续 5~10 年
游戏的运营和技术人员
实际项目管理中的挑战
8.1.3 游戏中玩家之间的关系
8.1.4 游戏结果的共享范围
8.1.5 聊天系统的内容
8.1.6 维护和升级的计划
8.1.7 代码规模——如果需要迭代的代码过多就会遇到问题
编译时间
程序启动时间
测试的步骤数
服务器程序的启动步骤
数据验证
8.2 网络游戏开发团队的实际情况——和一般软件开发相同的地方
8.2.1 工作分配
8.2.2 持续提升网络游戏程序员技能的方法
从武术的“守、破、离”中学习提升技能的方法
“守”的阶段 ——从模仿开始
“破”的阶段——研讨会、技术会议
“离”的阶段——应该怎样进入工程师的最高级阶段
8.2.3 项目管理术——游戏开发和 Scrum
8.2.4 开发环境的选择
8.2.5 项目的移交——理所当然的事情也需要仔细归纳总结
测试的准备
缩短搭建开发环境的时间
设定合适的访问权限
8.3 本章小结
专栏 网络游戏开发的成本
看完了
关于本书
案例游戏和视频录像
案例游戏的运行环境
关于通信中间件 VCE
使用须知 ※ 请仔细阅读 ※
本书附加信息
致谢
专业术语
第 0 章 [快速入门]网络游戏编程:网络和游戏编程的技术基础
0.1 网络游戏开发者所需了解的网络编程基础
0.1.1 网络编程是必需的
0.1.2 网络编程与互联网编程
0.1.3 互联网编程的历史和思想
0.1.4 OSI 参考模型——透明地处理标准和硬件的变化
0.1.5 网络游戏系统及其层次结构
第 4 层大多使用 TCP 协议、不需要直接操纵第 3 层以下的分层
第 5 层以上的分层需要在游戏中予以实现
0.1.6 套接字 API 的基础知识
0.1.7 网络游戏和套接字 API——使用第 4 层的套接字 API
面向连接(流式)和无连接(数据报式)
专栏 网络编程的特性和游戏架构的关系——服务器、客户端所需具备的性能和功能
0.2 套接字编程入门——处理多个并发连接、追求性能
0.2.1 通信链路的确定(复习)
0.2.2 套接字 API 基础——一个简单的 ECHO 服务器、ECHO 客户端示例
0.2.3 TCP 通信链路的状态迁移和套接字 API
0.2.4 处理多个并发连接——通向异步套接字 API 之路
0.2.5 同步调用(阻塞)和线程
线程方式下的负载处理问题
0.2.6 单线程、非阻塞、事件驱动——使用 select 函数进行轮询
0.2.7 网络游戏输入输出的特点——单线程、事件驱动、非阻塞
0.2.8 网络游戏和实现语言
0.2.9 充分发挥性能和提高开发效率——从实现语言到底层结构
网络游戏的特殊性所造成的编程语言性能差异
0.2.10 发挥多核服务器的性能
专栏 输入输出的实现方针和未来提高性能的可能性
上下文切换——保存 CPU 的设置状态
多核处理器上不要运行过多的服务器进程
0.2.11 多核处理器与网络吞吐量——网络游戏与小数据包
以太网帧
各个网络层的头信息
多核处理器的数据传输能力
0.2.12 简化服务器实现——libevent
libevent 的特点
0.3 RPC 指南——最简单的通信中间件
0.3.1 通信库的必要性
确定数据格式来进行数据的收发
0.3.2 网络游戏中使用的 RPC 的整体结构
自动生成 RPC 存根代码的 RPC 工具
网络游戏和二进制数据交换格式/库
0.3.3 [补充]UDP 的使用
0.4 游戏编程基础
0.4.1 游戏编程的历史
0.4.2 采用“只要能画点就能做出游戏”的方针来开发入侵者游戏
0.4.3 游戏编程的基本剖析
初始化
无限循环
各个 Sprite 的行为——游戏逻辑主体
绘制
子过程
0.4.4 游戏编程精粹——不使用线程的“任务系统”
0.4.5 两种编程方法的相似性——不使用线程
0.5 小结
专栏 确保开发效率和各平台之间的可移植性
提高开发效率
使用封装保持源代码级的兼容性
降低 OS 差异性的封装工作
第 1 章 网络游戏的历史和演化:游戏进入了网络世界
1.1 网络游戏的技术历史
1.1.1 网络游戏出现前的 50 年
1.1.2 20 世纪 50 年代前:计算机诞生
1.1.3 20 世纪 50 年代:早期的电子游戏
1.1.4 20 世纪 60 年代:各种颇具影响的机器登上历史舞台
1.1.5 20 世纪 70 年代:网络游戏的基本要素
1.1.6 20 世纪 80 年代:网络对战游戏登场
1.1.7 20 世纪 90 年代:游戏市场扩大
1.1.8 本世纪前 10 年的前期:网络游戏商业化
1.1.9 本世纪前 10 年的后半期:基于 Web 浏览器的 MMOG 在商业上获得成功
1.1.10 2010 年之后:究竟会出现怎么样的游戏呢?
1.2 从技术变迁看游戏文化和经济圈
1.2.1 解读技术发展图
1.2.2 3 个圈(三大范畴)
黑客文化圈
电视游戏 / 街机游戏商业圈
微软圈
1.2.3 两个游戏经济/文化圈
1.2.4 文化、经济与技术的关系
1.3 小结
专栏 成为出色的网络游戏开发程序员的条件
第 2 章 何为网络游戏:网络游戏面面观
2.1 网络游戏术语的定义
网络游戏的 4 个层面
2.2 网络游戏的物理层面
2.2.1 物理构成要素
2.2.2 物理模式 / 物理上的网络构成
本书中的物理线路是基于互联网的
2.3 网络游戏的概念层面
2.3.1 网络游戏及其基本结构
游戏的基础——认知、判断、操作的重复
电子游戏的结构
2.3.2 游戏进行空间——进行游戏时所需的所有信息
2.3.3 游戏的进展——游戏进行空间的变化
2.3.4 共享相同的游戏进展
可以进行共享
2.4 网络游戏的商业层面
2.4.1 商业层面的要求
2.4.2 有效地招募测试玩家——网络游戏与测试
封闭测试(CBT)
公开测试(OBT)
2.4.3 不断更新——网络游戏的运营和更新
2.4.4 节约服务器数量和带宽——网络游戏开支的特殊性
服务器成本的预估——估算服务器损坏的概率
线路成本的预估——尽可能节省带宽
2.4.5 从小规模开始,确保可扩展性——将风险降到最低,不要错过取胜的机会
2.4.6 提供多种收费方式——收费结算方式的变化
游戏点数的出现——实现了收费的细分化、实时化
2.4.7 低价、快速地根除攻击者——攻击、非法行为及其对策
商业目的的攻击
非商业目的的攻击——各种攻击方式,3D 网络游戏专用的客户端
2.4.8 减少服务器停止的次数和时间——不要让玩家失望
2.4.9 反馈游戏结果——日志分析和结果的可视化
游戏的元信息
2.4.10 更容易地与其他玩家相遇——玩家匹配
专用游戏大厅和虚拟世界的区别
未来的玩家匹配
2.5 网络游戏的人员和组织
2.5.1 与网络游戏服务的运营相关的人员
3 种职责以及分配方式
2.5.2 网络游戏服务运营的 3 项专门职责
2.5.3 开发团队
不可或缺的 4 种职业
小型团队
大型团队
从职责平衡来看游戏开发的特点——数据制作人员的比例
2.5.4 运维团队
服务器设备
2.6 网络游戏程序员所需的知识
2.6.1 网络游戏程序员所需的技术和经验
编程的基本技术
游戏编程的基础知识(对网络游戏的开发是必需的或者有用的知识)
游戏客户端开发的知识
数据库知识
系统运维知识
2.6.2 各种网络游戏开发知识
2.7 支持网络游戏的技术的大类
支持网络游戏的技术的 4 种形式
C/S 架构和 P2P 架构——物理结构的两种典型模式
MMO 架构和 MO 架构——逻辑结构的两种典型模式
网络游戏的 4 种形式——物理结构 × 逻辑结构
2.8 影响开发成本的技术要素
2.8.1 网络游戏与如今的开发技术
2.8.2 支持网络游戏主体的 3 大核心
游戏的数据形式
游戏的通信方式
游戏的反应速度
2.9 小结
专栏 网络游戏编程的最大难点——解决冗余和异步的问题
第 3 章 网络游戏的架构:挑战游戏的可玩性和技术限制
3.1 游戏编程的特性——保持快速响应
3.1.1 响应速度的重要性——时间总是不够的
3.1.2 将数据存放在内存中的理由——游戏编程真的有三大痛苦吗
3.1.3 每 16 毫秒变化一次——处理的信息及其大小
表现游戏进程所需的信息及其大小
可以用 RDBMS 实现吗?——与在内存中存放数据进行比较
3.1.4 大量对象的显示——CPU 的处理能力
家用游戏机与 CPU 周期
PlayStation 3(PS3)与 CPU 周期——可以用 RDBMS 来开发吗
3.1.5 无法预测玩家的操作——游戏状态千变万化
3.1.6 必须将游戏数据放在 CPU 所在的机器上
3.2 网络游戏特有的要素
3.2.1 通信延迟——延迟对游戏内容的限制
传输时间的具体内容
无法避免的延迟——延迟与游戏类型
3.2.2 带宽——传输量的标准
3.2.3 服务器——成本、服务器数量的估算
3.2.4 安全性——网络游戏的弱点
作弊——最大的安全隐患
为什么要作弊
作弊行为的手段
作弊的操作对象
冯诺依曼型计算机的宿命——防止作弊行为的服务
恐怖……作弊行为的影响
3.2.5 辅助系统(相关系统)
3.3 物理架构详解——C/S 架构、P2P 架构
3.3.1 基本的网络拓扑结构
实际使用的有星型(和总线型)、全网状结构——把通信延迟降至最低
3.3.2 物理架构的种类
3.3.3 C/S 架构——纯服务器型、反射型
反射型
3.3.4 P2P 架构
NAT 穿透
3.3.5 C/S + P2P 混合型架构
3.3.6 ad-hoc 模式
专栏 游戏客户端是什么
3.4 逻辑架构详解——MO 架构
3.4.1 MO、MMO 是什么?——同时在线数的区别
MMO 和 MO 的混合
3.4.2 MO 架构、MOG
3.4.3 同步方式——获得全体玩家的信息后,游戏才能继续
3.4.4 同步方式 / 全网状结构的实现——所有终端都拥有主数据
各终端(玩家)收发的信息内容
同步方式 / 全网状结构的必要条件和优势
同步方式 / 全网状结构的 3 个问题——通信网和收发信息在完整性上较为脆弱、中途加入游戏
传输线路的可靠性
最慢的终端会拖长整体的传输时间
3.4.5 同步方式 / 星型结构——暂时将输入信息集中到服务器上
星型结构的 4 个问题
同步方式不可避免的重大问题——不能中途加入游戏
同步方式的优势和问题解决的方法
3.4.6 异步方式——接受各终端上游戏状态的不一致
异步方式下实现方针的制定方法——对游戏内容的详细分析是不可缺少的
3.4.7 三大基本要素:自己、对手、环境——异步实现的指导方针
三大要素之间的关系
3.4.8 ❶ 自己和对手——对战游戏和玩家之间往来数据的抽象程度
格斗游戏的例子
攻击、防御、碰撞检测
格斗游戏的时序图
必须发送抽象度较低、表示原因的数据——对结果的接纳感
可能产生不一致的结果!
3.4.9 保持结果一致性的方法——两种覆盖方式
采用造成伤害的那一方的结果
采用受到攻击的那一方的结果
对这两种方式进行选择的原则——增加玩家的总体满意度
3.4.10 ❷ 自己和环境——可使用物品的格斗游戏和互斥控制
需要互斥控制的环境要素——互相竞争的资源“炸弹”
不需要互斥控制的环境要素——不会减少的资源“水”
游戏中的环境要素极难处理——必须详细理解游戏内容
3.4.11 互斥控制的实现——采用与同步方式类似的机制来实现异步方式
物品复制问题
给物品赋予唯一的 ID——判断物品是否被复制,发生的问题
物品复制的解决对策——由专门的软件负责协调
协调软件的基本功能和使用方法
炸弹以外的环境要素
3.4.12 状态会自动变化的环境——静态环境和动态环境
动态环境引起的问题——很难完全并行管理
解决动态环境所引起的问题的几种选择方案
3.4.13 ❸ 对手和环境的关系
3.5 逻辑架构详解——MMO 架构
3.5.1 MMO 架构、MMOG——在大量玩家之间共享长期存在的游戏过程
什么是持久?——游戏所需的时间和积累性
保证持久性数据、不断累积的大量数据的一致性的难度
客户端和服务器的完全分离
3.5.2 MMOG 的结构
MMO 架构的实现方针——浏览器方式、纯粹的 C/S 模式
浏览器方式、同步方式和异步方式的差异
MMO 架构中服务器、客户端的功能
服务器端处理——游戏在服务器上持续运行
3.5.3 大型多人网络游戏(MMO)
3.6 小结
专栏 设法改善网页游戏的画面显示间隔
第 4 章 [实践]C/S MMO游戏开发:长期运行的游戏服务器
4.1 网络游戏开发的基本流程
4.1.1 项目文档 / 交付物
同时进行开发之前的准备和初期实现
4.1.2 开发的进行和文档准备的流程
4.1.3 技术人员的文档 / 交付物
4.2 C/S MMO 游戏的发展趋势和对策
4.2.1 C/S MMO 游戏的特点
4.2.2 C/S MMO 架构(MMO 架构)特有的游戏内容
C/S MMO 架构的限制
4.3 策划文档和 5 种设计文档——从虚构游戏 K Online 的开发中学习
4.3.1 考虑示例游戏的题材
4.3.2 详细设计文档
详细设计文档的必要性
4.3.3 MMOG 庞大的游戏设定
4.3.4 5 种设计文档
4.3.5 设计上的重要判断
4.4 系统基本结构图的制定
4.4.1 系统基本结构图的基础
4.4.2 服务器必须具有可扩展性——商业模式的确认
4.4.3 各种瓶颈——扩展方式的选择
专栏 MMO 客户端特有的渲染性能瓶颈——游戏客户端的瓶颈
4.4.4 解决游戏服务器 / 数据库的瓶颈
4.4.5 什么都不做的情况(1 台服务器负责整个游戏世界)
4.4.6 空间分割法——解决游戏服务器的瓶颈
空间复制
4.4.7 实例法——解决游戏服务器的瓶颈
4.4.8 平行世界方式——解决数据库瓶颈
最容易产生瓶颈的是数据库写入操作
平行世界方式下的数据库分割
平行世界方式引起的问题
4.4.9 同时采用多种方法——应对越来越多的玩家
4.4.10 各种方式的引入难度
4.4.11 各个世界中数据库(游戏数据库)服务器的绝对性能的提高
应用层面的技巧
4.4.12 K Online 的设计估算——首先从同时在线数开始
瓶颈的确认
设计估算的思考原则
4.4.13 根据游戏逻辑的处理成本来估算——敌人的行动算法需要消耗多少 CPU
4.4.14 根据游戏数据库的处理负荷进行估算——找到“角色数据的保存频率”与“数据库负荷”的关系
4.4.15 可扩展性的最低讨论结果,追求进一步的用户体验
4.4.16 服务器的基本结构,1制定系统基本结构图
4.5 2进程关系图的制定
4.5.1 2进程关系图的准备
4.5.2 服务器连接的结构——只用空间分割法
4.5.3 服务器连接的结构——使用平行世界方式和空间分割法
4.5.4 使用平行世界方式进行扩展的关键点
4.6 带宽 / 服务器资源估算文档的制定
4.6.1 以进程列表为基础估算服务器资源
4.6.2 以 CPU 为中心的服务器和以存储为中心的服务器
4.6.3 服务器资源的成本估算——首先从初期费用开始
服务器资源的维护成本
4.6.4 带宽成本的估算
98% 的传输量用于玩家和 NPC 的移动通知
4.6.5 带宽减半的方针——首先是调整策划,然后在程序上下功夫
策划的调整——带宽降低方案1
在程序上下功夫——带宽降低方案2
4.6.6 策划内容的分析对带宽的降低很有效
4.7 4协议定义文档的制定——协议的基本性质
4.7.1 4协议定义文档基础
4.7.2 “协议的基本性质”的要点
4.7.3 协议的种类、以及进程之间关系的种类
4.7.4 8 种类型的协议
4.7.5 C/S MMO 采用 TCP
4.7.6 与“协议的基本性质”的对应
协议设计的基本策略
4.8 4 协议定义文档——协议的 API 规范(概要)
4.8.1 协议的实现原则
后端实现基本的、通用的功能,前端实现专用功能
前端依赖于后端的结构
协议是无状态和简单操作的集合
在一个地方接受外部的异常状况
优秀的 API 的调用时序——不调用才好吗
4.8.2 8 种协议的功能 / 形式概述
gmsv 协议
loginsv 协议
msgsv 协议
dbsv 协议
worldsv 协议
commondbsv 协议
authsv 协议
logsv 协议
4.9 4 协议定义文档——协议的 API 规范(详细)
4.9.1 协议 API 规范(详细)的制定
4.9.2 API 的函数定义
gmsv 协议
API 的类型和消息的特性
loginsv 协议
msgsv 协议
dbsv 协议
worldsv 协议
commondbsv 协议
authsv 协议
logsv 协议
4.9.3 常量定义
4.9.4 API 的调用时序
必要的时序图——关系到多个进程的典型处理是什么
复杂性尽可能集中在网络的终端,也就是 cli 侧
向在线好友发送消息
4.9.5 时序图制定的要点
4.10 4协议定义文档——数据包的格式
4.10.1 C/S MMO 主要采用 TCP(复习)
4.10.2 C/S MMO 使用包含专用字节数组的二进制协议
4.10.3 二进制协议的实现——首先从术语的整理开始
记录的大小
报文头
数据部分的压缩和加密
实现上的要领
专栏 C/S MMO 的压缩和加密
4.11 5数据库设计图
4.11.1 要在编程之前进行对重要的表进行设计
4.11.2 C/S MMO 中的数据库实现的历史变迁
20 世纪 70~80 年代:没有数据持久化,复活咒语
20 世纪 90 年代:保存在文件中
本世纪初前期~:RDBMS
4.11.3 整理 K Online 所需的表
专栏 百花缭乱的 KVS——未来 C/S MMO 中数据库的使用情况
需要持久化的信息以及数据的包含关系
数据的特性和各个表的准备
4.11.4 数据库性能预测
表的特性、必须注意的表
查询的内容——read 篇
查询的内容——write 篇
4.12 服务器 / 客户端软件 + 中间件——实践中不可或缺的开发基础
4.12.1 网络游戏的中间件
C/S MMO 中间件
全功能型中间件
小规模型 MMOG 中间件
通信中间件
4.12.2 开发的基础软件——可以立刻尝试的 C/S MMO 开发体验
客户端相关的软件
4.13 程序开发中的基本原则
4.13.1 如何开始编程、如何继续编程
4.13.2 数据结构优先原则——基本原则1
视频游戏中的数据分类
4.13.3 实现数据结构之前的讨论——出现在画面上和不出现在画面上的元素
敌方角色和 POP 设定
4.13.4 维持可玩状态的原则——基本原则2
4.13.5 后端服务器的延后原则——基本原则3
4.13.6 持续测定的原则——基本原则4
客户端开发中持续测定的例子
服务器开发中的持续测定
4.14 C/S MMO 游戏 K Online 的实现——编程开始!
4.14.1 开发的安排
4.14.2 K Online 中的分工计划
4.14.3 K Online 中“框架阶段”和“原型阶段”的区别
4.14.4 [ 步骤 1~2] 框架~原型阶段
框架代码的准备
1 autocli
2 cli
专栏 每一步的进度管理形式
3 协议
4 ID
5 gmsv
6 dbsv
4.14.5 “不实际运行起来是不会理解的!”——游戏开发的特殊性
典型的失败——企业中的网络游戏开发
专栏 C/C++ 以外的语言
4.14.6 框架的整体结构
cli 中的文件
专栏 VCE 是什么
gmsv、dbsv、proto 中的文件
4.14.7 以怎样的顺序来编写代码
4.14.8 首先编写协议定义文件 k.xml——开发流程1
4.14.9 协议定义的要点
4.14.10 通信连通确认:ping 函数
4.14.11 账户登录和账户认证:signup 函数、authentication 函数
4.14.12 角色创建:createCharacter 函数
4.14.13 登录:login 函数
4.14.14 在地面上移动:move 函数、moveNotify
以方格为单位
路径搜索和实际的移动处理
移动路径的发送方式——优先发送最终结果
移动结果的通知范围
moveNotify 函数
attack 函数、attackNotify 函数
4.14.15 编写 gmsv/Makefile——开发流程 2
4.14.16 从示例中复制 gmsv/climain.cpp 和 gmsvmain.cpp——开发流程 3
在 sv.cpp 中实现 signup 函数
“dbsv1 次往返”的请求和线程
专栏 dbsv 服务器代码的自动生成——后端服务器实现的简化
4.14.17 自动测试客户端 autocli 的实现——开发流程 4
测试的状态迁移
autocli 的 main() 函数
signup() 函数
专栏 gmsv 中线程的使用
4.14.18 图形客户端 cli 的创建和运行确认——开发流程
SDL
绘制图形
运行确认
实现字体的显示
出现敌人、追赶敌人
打倒敌人,获得经验值
确保以后可以继续进行游戏——游戏状态的保存
4.14.19 框架之后的开发——开发流程、后续事项
4.15 总结
第 5 章 [实践] P2P MO游戏开发:没有专用服务器的动作类游戏的实现
5.1 P2P MO 游戏的特点和开发策略
5.1.1 P2P MO 和动作类游戏——游戏的状态频繁发生改变
5.1.2 RPC 和共享内存
5.1.3 P2P MO 游戏的特点——和 C/S MMO 游戏的比较和难点
5.1.4 P2P MO 游戏的优点
5.1.5 从概要设计开始考虑[多人游戏模式]
5.2 J Multiplayer 游戏开发案例的学习——和 K Online 的不同
5.2.1 J Multiplayer ——和 K Online 的比较
5.2.2 P2P MO 游戏开发的基本流程
5.2.3 P2P MO 游戏开发的交付产品——开发各个阶段需要提交的资料
概要设计的详细资料
5.2.4 和 C/S MMO 的数据量/规模的比较
5.3 P2P MO 游戏的设计资料
5.3.1 系统基本结构图
5.3.2 进程关系图
星状拓扑结构还是网状拓扑结构
首先来验证星状拓扑结构
中途加入游戏的实现
5.3.3 带宽 / 服务器资源计算资料
5.3.4 通信协议定义资料和 API 规格
通信协议的序列图
函数和常量的定义
专栏 什么是“游戏逻辑”
5.3.5 带宽消耗量的估算
“1/600”的实现方法——仔细检查游戏设计寻找解决方案
5.3.6 其他资料
5.4 客户端 / 服务器软件 + 中间件、基本原则
5.4.1 P2P MO 开发的最终交付产品
5.4.2 P2P MO 中使用的中间件
5.4.3 编程时应该注意的基本原则——针对 P2P MO 游戏
5.5 P2P MO 游戏 J Multiplayer 的实现——正式开始编程
5.5.1 J Multiplayer 的编程计划
5.5.2 开发流程——K Online 的回顾
5.5.3 J Multiplayer 开发阶段——开发顺序和内容
5.5.4 第 1 阶段的要点
5.5.5 客户端程序的开发案例
5.5.6 “共享内存方式”的实现——开始编码
竞争状态——共享内存方式的注意点
加锁处理
P2P MO 和竞争状态
5.5.7 P2P MO 游戏开发中该如何防止发生竞争状态
同步处理的实现例子
可动物体的枚举类型和类的设计
基本操作的矩阵
修改游戏进行状态相关处理的规范
玩家角色的处理规范
敌人的处理规范——Enemy/Create
子弹的处理规范
5.5.8 共享内存开发方式该如何编码——共享内存开发方式和 RPC 开发方式的比较
RPC 开发方式——C/S MMO 游戏
共享内存开发方式——P2P MO 游戏
RPC 开发方式的代码量——move(5, 5)
共享内存开发方式的代码量——move(5, 5)
共享内存开发方式的优缺点
[ 补充 ] 你会进行代码清洁工作吗?
5.5.9 SyncValue 类
专栏 数据中心的地理位置分布
5.6 支持 C/S MO 游戏的技术 [ 补充 ]
5.6.1 C/S MO 和 NAT 问题
5.6.2 什么是 NAT 问题
5.6.3 NAT 遍历——解决 NAT 问题建立通信路径的技术
NAT 遍历技术的限制
使用 NAT 遍历技术的其他缺点
5.6.4 NAT 问题的实际解决方法
5.6.5 中继服务器
5.6.6 中继服务器的折衷方案
5.7 总结
第 6 章 网络游戏的辅助系统:完善游戏服务的必要机制
6.1 辅助系统需要的各种功能
6.1.1 现有服务提供的辅助系统功能
通用
面向游戏主机的服务
面向网页游戏的服务
现有中间件
6.1.2 现有服务的功能一览
6.1.3 网页游戏开发方法和客户端游戏的开发方法
6.2 交流 / 通信功能
6.2.1 玩家匹配 P2P MO
P2P MO 游戏中多人游戏需要满足的条件
玩家匹配服务器
满足多人游戏的两个条件的具体做法——J Multiplayer 游戏
满足多人游戏的两个条件的实现——J Multiplayer 游戏
匹配结果画面
6.2.2 游戏大厅 P2P MO
游戏大厅和匹配
《星际争霸 2》(StarCraft II )的例子
开发要点
6.2.3 中继服务器 P2P MO
中继服务器需要的性能
6.2.4 聊天 P2P MO C/S MMO
聊天功能的实现
聊天功能的基本处理
同步发送消息的规模
6.2.5 邮件 P2P MO C/S MMO
6.2.6 好友列表 P2P MO C/S MMO
6.2.7 玩家状态 P2P MO C/S MMO
游戏中的玩家状态服务的特点
玩家状态服务的实现
6.2.8 加锁服务器 P2P MO C/S MMO
加锁服务器的实现
6.2.9 黑名单 P2P MO C/S MMO
黑名单功能的实现
6.2.10 语音聊天 P2P MO C/S MMO
6.3 游戏客户端实现相关的辅助系统
6.3.1 玩家成绩管理 P2P MO C/S MMO
玩家成绩管理的实现
6.3.2 存储功能 P2P MO
6.3.3 (游戏客户端)更新 P2P MO C/S MMO
更新的基本功能
更新和访问模式
自己开发更新功能
6.3.4 排行榜 P2P MO C/S MMO
排名功能的实现——网络游戏特有的需求
临时排名法
6.4 运营辅助系统
新闻发布 P2P MO C/S MMO
新闻发布的机制
6.5 付费相关的辅助系统
6.5.1 付费认证 P2P MO C/S MMO
网络游戏的付费
付费的机制
支付的序列图
使用充值服务的好处
6.5.2 虚拟货币管理 P2P MO C/S MMO
P2P MO 游戏和 C/S MMO 游戏
虚拟货币管理服务器的实现
虚拟货币管理的注意点
专栏 C/S MMO 游戏的收入
6.6 其他辅助功能
6.6.1 游戏数据浏览/查询工具 P2P MO C/S MMO
游戏数据的保存状态
不是很清晰的保存状态时
选择可以阅读的形式
关键词查询
游戏的设定数据和数据库
6.6.2 敏感词过滤 P2P MO C/S MMO
6.7 本章小结
第 7 章 支持网络游戏运营的 基础设施:架构、负荷测试和运营
7.1 基础设施架构的基础知识
7.1.1 C/S MMO 和 P2P MO 的基础设施(概要)
7.1.2 基础设施架构需要进行的工作 ——从开发整体来看
7.1.3 基础设施的成本估算
7.1.4 成本的概念、单位
7.1.5 网络游戏服务器在一定程度上可以接收的条件
7.1.6 硬件、信息设备
服务器
存储设备
网络交换机
路由器 / 防火墙
7.1.7 软件
服务器操作系统
数据库管理系统
杀毒软件
虚拟化软件
7.1.8 数据中心相关的成本
数据中心建设费
7.1.9 服务费(数据中心以外)
服务器监控服务
域名使用费、电子签名服务费
7.1.10 网络带宽费
7.1.11 电费
7.2 开发者需要知道的基础设施架构技巧
7.2.1 服务规模的扩大 / 缩小——用户数和需要的基础设施规模
7.2.2 典型的环境
不容易估算的条件
7.2.3 负荷曲线
最初的设计需要考虑峰值的应对
K Online
J Multiplayer
7.2.4 面向开发者的基础设施架构要点
7.2.5 服务器部署
维护时间和自动化发布
7.2.6 登台环境
网络游戏的特殊注意点
7.2.7 服务器的监控、生死监控
7.2.8 日志输出 / 管理
日志保留的策略——“尽可能保留所有日志”并且“原因和结果都保留”
日志输出方法——推荐的组合、syslog 的问题
日志服务器
7.3 K Online 、J Multiplayer 游戏的基础设施架构
7.3.1 K Online 的基础设施
Alpha 测试
封闭 Beta 测试
公开 Beta 测试
7.3.2 J Multiplayer 的基础设施
自己开发部分辅助系统
首先进行负荷测试、估算基础设施
同时在线数和注册用户数——排行榜的典型负荷测试步骤
预测玩家的游戏方式——排行榜的典型负荷测试步骤
根据测试结果修改设计
7.4 负荷测试
7.4.1 负荷测试的准备
7.4.2 K Online 在生产环境的负荷测试
测试的分解
负荷测试需要的环境
7.4.3 负荷测试时使用的服务器监控命令
vmstat、/proc/interrupts
ps
top
netstat
7.4.4 J Multiplayer 在生产环境下的负荷测试
J Multiplayer 的测试场景
负荷测试必要的测试环境
7.5 游戏上线
7.5.1 游戏上线前——从确认安全设定开始
防止系统外部攻击的安全设定
和系统内部管理相关的安全设定
7.5.2 游戏上线后 ——系统监控
7.5.3 服务器的组群化
7.5.4 故障发生时的应对
7.6 本章小结
第 8 章 网络游戏的开发体制:团队管理的挑战
8.1 游戏的策划内容和开发团队 网络游戏特有的挑战
8.1.1 游戏的策划内容是团队管理的关键
8.1.2 游戏数据的持久化
运营刚开始的 3 个月最困难,运营可以持续 5~10 年
游戏的运营和技术人员
实际项目管理中的挑战
8.1.3 游戏中玩家之间的关系
8.1.4 游戏结果的共享范围
8.1.5 聊天系统的内容
8.1.6 维护和升级的计划
8.1.7 代码规模——如果需要迭代的代码过多就会遇到问题
编译时间
程序启动时间
测试的步骤数
服务器程序的启动步骤
数据验证
8.2 网络游戏开发团队的实际情况——和一般软件开发相同的地方
8.2.1 工作分配
8.2.2 持续提升网络游戏程序员技能的方法
从武术的“守、破、离”中学习提升技能的方法
“守”的阶段 ——从模仿开始
“破”的阶段——研讨会、技术会议
“离”的阶段——应该怎样进入工程师的最高级阶段
8.2.3 项目管理术——游戏开发和 Scrum
8.2.4 开发环境的选择
8.2.5 项目的移交——理所当然的事情也需要仔细归纳总结
测试的准备
缩短搭建开发环境的时间
设定合适的访问权限
8.3 本章小结
专栏 网络游戏开发的成本
看完了