支撑网络游戏的技术——壮丽的游戏世界的幕后
这是最近出版社要求评估的一本书的目录。大家可以看看书的内容是不是受欢迎。
原书介绍(日文):http://gihyo.jp/book/2011/978-4-7741-4580-8
豆瓣链接:http://book.douban.com/subject/6013773/
原著:中嶋謙互
A5/624页
目录
第0章 [快速入门]网络游戏编程——网络和游戏编程的技术基础
0.1 以网络游戏编程为目的的网络编程基础
网络编程是必须的(!)
网络编程、互联网编程
互联网编程的历史和思想
OSI参考模型——透明地处理标准和硬件的变化
网络游戏系统和分层
第4层多采用TCP,没必要直接操作第3层以下
第5层由游戏自己实现
套接字API的基础知识
网络游戏和套接字API——使用第4层的套接字API
面向连接(流式)和无连接(数据报式)
专栏 网络编程的特点和游戏形式的关系——对服务器、客户端的性能和功能要求
0.2 套接字编程入门——处理多个并发连接,追求性能
通信链路的确定(复习)
套接字API的基础——简单的ECHO服务器、ECHO客户端的例子
TCP通信链路的状态迁移和套接字API
处理多个并发连接——通向异步套接字API之路
线程方式的处理负载问题
单线程,非阻塞,事件驱动——用select函数进行轮询
网络游戏的输入输出实现的特点——单线程,事件驱动,非阻塞
网络游戏和实现语言
发挥性能和提高开发效率——从实现语言到底层
网络游戏的特殊原因导致的语言性能差异
发挥多核心服务器的性能
专栏 输入输出实现的方针和未来提高性能的可能性
上下文开关——保存CPU的设置状态
多核心服务器上不要跑过多的服务器进程
多核心服务器和网络吞吐量——有网络游戏和小数据包
以太网的帧
各个网络层的头
多核心服务器的数据发送能力
简化服务器实现——libevent
libevent的特点
0.3 RPC指南——最简单的通信中间层
通信库的必要性
以固定格式发送接收信息
网络游戏采用的RPC的整体结构
自动生成RPC桩代码的RPC工具
网络游戏和二进制数据交换格式/库
[补充]UDP的使用方法
0.4 游戏编程的基础
游戏编程的历史
“只要能画点就能作出游戏!”用路线(?)做的小蜜蜂游戏
来看看伪代码!游戏编程基础解剖
初始化
无限循环
各sprite的动作——游戏逻辑的主体
描绘
子过程
游戏编程进阶——不使用线程的“任务系统(Task system)”
两种编程方法的相似性——不使用线程
0.5 总结
专栏 保证开发效率和平台间的可移植性
第1章 网络游戏的历史和发展——游戏加入了“网络”元素!
1.1 网络游戏的技术史
网络游戏的历史还不足50年
1950年以前:计算机出现
20世纪50年代:最早的视频游戏
20世纪60年代:具有影响力的各种机器出现
20世纪70年代:网络游戏的基本要素成型
20世纪80年代:网络对战游戏出现
20世纪90年代:游戏市场扩大
21世纪00年代早期:网络游戏业出现
21世纪00年代后期:浏览器上的MMOG商业的成功
2010年以后:会出现什么呢?
1.2 从技术变迁来看游戏文化和经济圈
解读技术变迁图
三个圈子(类别)
黑客文化圈
家用机/街机游戏商业圈
微软圈
两个游戏经济/文化圈
文化经济和技术的关系
1.3 总结
专栏 网络游戏获得商业成功的条件
第2章 网络游戏是什么?——从各种角度审视“网络游戏”
2.1 网络游戏术语的定义
网络游戏的4个侧面
2.2 网络游戏的物理面
物理组成元素
物理模型/物理网络结构
本书讨论对象为互联网上的网络游戏
2.3 网络游戏的概念面
网络游戏的基本结构
游戏的基础——反复出现的认知、判断和操作
视频游戏的原理
游戏的空间——游戏所需的各种信息
游戏的进展——游戏空间的变化
共享相同的游戏进展
共享是可能的
2.4 网络游戏的商业面
从商业上提出的要求
有效地招募测试玩家——网络游戏和测试
封闭测试(CBT)
公开测试(OBT)
不断更新——网络游戏的运营和更新你
(1)定期的补丁
(2)大型补丁(扩展包、附加包)
(3)紧急维护
节约服务器台数和带宽——网络游戏费用的特殊性
(1)人力成本(2)设备成本——运营:发售之后的成本很高
服务器成本预算——估算服务器损坏的概率
线路成本的预算——尽可能节省带宽
从小规模开始,保证可扩展性——将风险降到最低,同时不要错过发展机会
提供多种收费方式——收费结算的变化
游戏点数出现——实现了收费的细分化、实时化
便捷、快速地根除攻击者——攻击、非法行为和对策
商业目的的攻击
非商业目的的攻击——各种攻击方式,3D网络游戏专用的游戏客户端
减少服务器停机的次数和时间——不要让玩家失望
(1)计划维护造成的停机
(2)故障或攻击造成的服务停止
游戏结果的反馈——日志分析和结果的可视化
游戏内的信息
(1)最高成绩排名
(2)游戏战绩
(3)其他统计
游戏战绩需要更高级的技术
更简单地与其他玩家相遇——玩家匹配
(1)自动选择
(2)专用游戏大厅
(3)虚拟世界(可视化游戏大厅)
专用游戏大厅和虚拟世界的区别
未来的玩家匹配
2.5 网络游戏的人和组织面
与网络游戏服务运营相关的人
三种功能和责任分配方式
网络游戏服务运营的三个专门功能
开发团队
必不可少的4种植业
小型团队
大型团队
从职业平衡来看游戏开发的特点——数据编写人员的比例
运营团队
服务器设施
2.6 网络游戏程序员必备的知识
网络游戏程序员必备的技术和经验
编程的基础技术
游戏编程的基础知识(网络游戏开发中是必须的,至少是有用的)
游戏客户端开发的知识
数据库知识
系统运维知识
方方面面的网络游戏开发知识
2.7 支撑网络游戏的技术的大分类
支撑网络游戏技术的4种形式
C/S型和P2P型——物理结构,两种典型模式
MMO型和MO型——逻辑结构,两种典型模式
网络游戏的4中形式——物理结构x逻辑结构
2.8 关系到开发费用的技术要点
网络游戏和现在的开发方法
支撑网络游戏本身的3大轴心
游戏的数据额是
游戏的通信方式
游戏的反应速度
2.9 总结
专栏 网络游戏编程的最大难点——解决冗余化和异步的问题
第3章 网络游戏的架构——挑战游戏趣味性和技术限制
3.1 游戏编程的特点——保持快速响应
响应速度的重要性——时间总是不够的!
内存存放数据的重要性——艰难痛苦的游戏编程(!?)
(1)每16毫秒变化一次——处理的信息大小
游戏进度所必须的信息及其大小
能用RDBMS实现吗?——与内存存放数据比较
(2)显示大量对象——CPU的处理能力
家用计算机和CPU时钟周期
Play Station 3(PS3)和时钟周期——能用RDBMS方式开发吗?
(3)无法预测玩家的操作——千变万化的游戏状态
RDBMS方式无法实现的信息量和处理速度
必须将游戏进度的数据与CPU放在同一台机器上
3.2 网络游戏的特殊元素
通信延迟——延迟对游戏内容的限制
通信时间的具体内容
无法避免的延迟——延迟和游戏流派
带宽——通信量的标准
服务器——成本、服务器数量的估算
安全——网络游戏的弱点
作弊——最大的安全隐患
为何要作弊?
作弊行为的手段
作弊的操作对象
冯诺依曼型计算机的宿命——防止作弊行为的服务
认真面对——作弊行为的波及效果
辅助系统(周边系统)
3.3 物理架构详解——C/S型,P2P型
基本网络拓扑结构
实际使用的有星型(和总线型)、全网格型——把通信延迟降至最低
物理架构的种类
C/S型——纯服务器型,反射型
反射型
P2P型
NAT遍历
C/S+P2P混合型
ad-hoc模式
专栏 游戏客户端是什么?
3.4 逻辑架构详解——MO型
MO、MMO是什么?——同时在线玩家数的区别
MMO和MO的混合
MO型,MOG
同步式——获得全员的信息之后游戏才能继续
同步式/全网格型的实现——所有终端都持有主数据
各终端(玩家)发送接收的信息内容
同步式/全网格型的必要条件和优势
同步式/全网格型的3个问题——在通信网络上发送和接收消息的脆弱的完整性,中途加入游戏
对通信线路的依赖性
瓶颈在最慢的终端上
同步式/星型的实现——将输入信息先存到服务器上
星型的4个问题
同步式不可避免的重大问题——无法中途加入游戏
同步式的有时和解决问题的方法
异步式——接受各终端上游戏进度不统一的状态
异步实现方针的制定方法——必须详细分析游戏内容
3个基本元素:自己、对手、环境——异步实现的讨论指针
3个元素的关系
(1)自己和对手——对战游戏和玩家间交流数据的抽象度
格斗游戏的例子
攻击、防御、命中判定
格斗游戏的时序图
抽象度较低,必须发送表示原因的数据——对结果的接纳感
可能产生完全不同的结果!
维持结果一致性的方法——两种覆盖方式
使用造成伤害方的结果
使用受到伤害方的结果
方式选择的原则——增大玩家的总体满意度
(2)自己和环境——可使用物品的格斗游戏和互斥控制
需要互斥控制的环境元素——冲突的资源“炸弹”
不需要互斥控制的环境元素——不会减少的资源“水”
游戏中的环境元素很难处理——必须详细理解游戏内容
互斥控制的实现——采用与同步式类似的原理实现异步式
物品复制问题
给物品赋予唯一的ID——判断物品是否被复制,发生的问题
物品复制的应对策略——由专门的软件负责协调
协调软件的基本功能和使用方法
炸弹之外的环境元素
状态会自动变化的环境——静态环境和动态环境
动态环境产生的问题——很难完全并行管理
动态环境引发的问题的可能的解决方案
(3)对手和环境的关系
3.5 逻辑架构详解——MMO型
MMO型,MMOG——在大量玩家之间共享长期的游戏进度
什么是连续?——玩游戏所需的时间和积累性
连续的数据,保持积累的大量数据的一致性的难度
客户端和服务器完全分离
MMOG的原理
MMO型的实现方针——浏览器式,纯粹的C/S模型
浏览器式和同步式、异步式的区别
MMO型中的服务器、客户端的功能
服务器处理——在服务器上推进游戏
MMO型的课题
3.6 总结
专栏 改善浏览器方式下图形显示延迟的方法
第4章 [实践] C/S MMO游戏开发——长期运行的游戏服务器的存在
4.1 网络游戏开发的基本流程
对象的资料和成果
准备和初期实现同时进行
进行开发和准备资料的流程
技术人员的资料和成果
4.2 C/S MMO游戏的倾向和对策
C/S MMO游戏的特点
C/S MMO型(MMO型)的游戏内容
C/S MMO型的限制
4.3 企划资料和5种设计资料——在空想游戏《K Online》的开发中学习
寻找示例游戏的题材
企划详细资料
企划详细资料的必要性
MMOG宏大的游戏设定
5种设计资料
设计上的重要判断
4.4 [1]建立系统基本结构图
系统基本结构图的基础
服务器系统比句具有可扩展性——确认商业模型
各种瓶颈——选择扩展方式
专栏 MMO客户端特有的绘图性能瓶颈——游戏客户端的瓶颈
消除游戏服务器/数据库的瓶颈
如果什么都不做的话(一台服务器负责整个游戏世界)
空间分割法——消除游戏服务器的瓶颈
空间复制
副本法——消除游戏服务器的瓶颈
平行世界法——消除数据库的瓶颈
最容易产生瓶颈的就是数据库写入操作
平行世界方式中的数据库分割
平心世界方式引发的问题
同时采用多种手段——应对越来越多的用户
各种方式的引入难度
每个世界的数据库(游戏数据库)服务器的绝对性能的提升
应用层面的技巧
K Online的设计预算——首先确认并行连接数
确认瓶颈
设计预算时考虑问题的原则
根据游戏逻辑的处理成本进行预算——敌人的行动算法需要耗费多少CPU
根据游戏数据库的处理负载进行预算——找出角色数据保存频率和数据库负载的关键点
可扩展性的最低讨论结果,追求进一步的用户体验
服务器的基本结构,建立一个系统基本结构图
4.5 [2]建立进程关系图
[2]准备进程关系图
服务器连接的结构——仅使用空间分割法
服务器连接的结构——结合使用平行世界方式和空间分割法
使用平行世界方式时规模扩展的关键
4.6 [3]建立带宽/服务器资源计算资料
以进程列表为基础估算服务器资源
以CPU为中心的服务器,以存储为中心的服务器
估算服务器资源的成本——从初期费用开始
服务器资源的维持成本
估算带宽成本
98%的通信量为玩家/NPC的移动通知
带宽减半的方针——首先调整企划,然后在程序上下功夫
调整企划——带宽削减方案1
在程序上下功夫——带宽削减方案2
重新审视企划内容是削减带宽的好办法
4.7 [4]建立协议定义资料——协议的基本性质
[4]协议定义资料的基础
"协议的基本性质"的关键
协议种类和进程关系的种类
8种协议
C/S MMO采用TCP
"协议的基本性质"的对应一览
协议设计的基本策略
4.8 [4]协议定义的资料——协议的API规格(概览)
协议实现的原则
后端实现基本/通用功能,前端实现专用功能
前端依赖于后端的结构
协议仅仅是设置状态和简单的操作
外部异常等现象在一个地方处理
优秀API的调用时序图——不调用才是优秀!?
8种协议的功能/形态概要
gmsv协议
loginsv协议
msgsv协议
dbsv协议
worldsv协议
commondbsv协议
authsv协议
logsv协议
4.9 [4]协议定义的资料——协议API规格(详细)
制定协议API规格(详细)
API函数定义
gmsv协议
API类型和消息的特性
loginsv协议
msgsv协议
dbsv协议
worldsv协议
commondbsv协议
authsv协议
logsv协议
常量定义
API的调用时序图
必要的时序图——多个进程相关的典型处理是什么?
(1)认证
(2)gmsv创建角色
(3)gmsv,msgsv进行登录
(4)从gmsv中推出
(5)用gmsv移动角色
(6)用gmsv操作角色的物品(商店,交易)
(7)用msgsv从好友列表中添加/删除好友
(8)给在线好友发消息
建立时序图的要点
4.10 [4]协议定义的资料——报文格式
C/S MMO主要使用TCP协议(复习)
C/S MMO采用二进制协议,使用专用的字节序列
二进制协议的实现——先来整理下术语
记录的大小
协议头
数据部分的压缩和加密
实现上的技巧
专栏 C/S MMO的压缩和加密
4.11 [5]数据库设计图
重要的表的设计要在编程之前进行
C/S MMO的数据库实现的历史变迁
70年代~80年代:无数据持久化,复活咒语
90年代:保存到文件中
2000年代前期:RDBMS
整理K Online必须的表
专栏 百花缭乱的KVS
未来C/S MMO中的数据库的用法
需要持久化的信息,数据的包含关系
数据特性,个别表的尊卑
数据库性能预测
预测数据库的处理性能
表的特点,需要注意的表
查询的内部——read篇
查询的内部——write篇
4.12 服务器/客户端软件+中间层——实践中必不可少的开发基础设施
网络游戏的中间层
C/S MMO的中间层
全装备型中间层
小型MMOG中间层
仅通信中间层
开发基础设施软件——可以立即体验的C/S MMO开发体验
服务器相关软件
客户端相关软件
4.13 编写程序时的基本原则
编程开始的方法、继续的方法
数据结构优先的原则——基本原则[1]
视频游戏中的数据分类
数据结构实现之前的讨论——在画面上出现/不出现的元素
敌方角色和POP设定
维持可玩状态的原则——基本原则[2]
后端延后原则——基本原则[3]
持续测量原则——基本原则[4]
客户端开发中的持续测量的例子
服务器开发中的持续测量
4.14 C/S MMO游戏“K Online”的实现——开始编程!
开发阶段
K Online中的分工计划
K Online中的里程碑和原型阶段设置
[第1步~第2步]里程碑和原型的阶段
准备骨架代码
[1]autocli
[2]cli
专栏 每一步的进度管理形式
[3]协议
[4]ID
[5]gmsv
[6]dbsv
“跑一下才知道怎么回事!”——游戏开发的特殊性
典型的困难——企业中的网络游戏开发
专栏 关于C/C++之外的语言
骨架的整体形态
cli中
gmbs,dbsv,proto中
专栏 VCE是什么?
按照什么顺序写代码?
首先编写协议定义文件k.xml——开发流程[1]
协议定义的要点
确认通信是否畅通:ping函数
帐号登录和帐号认证:signup函数,authentication函数
角色创建:createCharacter函数
登录函数:login函数
地上移动:move函数,moveNotify
以方格为单位
路线搜索和实际的移动处理
移动路线的发送方法——优先发送最终结果
移动结果的统治范围
moveNotify函数
attack函数,attackNotify函数
编写gmsv/Makefile——开发流程[2]
从示例中复制gmsv/climain.cpp和gmsvmain.cpp——开发流程[3]
sv.cpp中实现signup函数
专栏 自动生成dbsv服务器代码——简化后端服务器实现
dbsv 1次往返型的请求和线程
自动测试客户端autocli的实现——开发流程[4]
测试的状态迁移
autocli的main()函数
signup()函数
专栏 gmsv中的线程使用等
图形客户端cli的创建和执行确认——开发流程[5]
SDL
绘制图形
执行确认
实现字体显示
出现敌人,追赶敌人
击败敌人,获得经验值
保证以后能继续游戏——保存游戏状态
骨架之后的开发——开发的流程,未来……
4.15 总结
第5章 [实践] P2P MO游戏开发——不使用专用服务器实现动作游戏
5.1 P2P MO游戏的倾向和策略
P2P MO和动作游戏——游戏状态变化频率很高
RPC型实现和共享内存型实现
P2P MO游戏的特点——与C/S MMO比较,难点
P2P MO游戏的优势
从企划开始阶段就要意识到“多人游戏”
5.2 从空想游戏“J Multiplayer”的开发中学习——与“K Online”的区别
J Multiplayer——与K Online对比
P2P MO游戏开发的基本流程
P2P MO游戏开发的成果——开发阶段,各种资料
企划详细资料
与C/S MMO在数据量和规模上的区别
5.3 P2P MO游戏的设计资料
系统基本结构图
进程关系图
星型还是全网格型?
首先讨论下星型
实现中途加入游戏
带宽/服务器资源的计算资料
协议定义资料,API规格
协议的时序图
函数和常量的定义
专栏 "游戏逻辑"是什么?
估算带宽消耗
实现"600分之1"的途径——仔细研究游戏的企划内容,寻找解决方案
其他资料
5.4 服务器/客户端软件和中间层,基本原则
P2P MO开发中的成果的实际样子
P2P MO的中间层
编写程序的基本原则——P2P MO的情况
5.5 P2P MO游戏"J Multiplayer"的实现——开始编程!
J Multiplayer的分工计划
实现流程——复习下K Online
J Multiplayer开发的阶段——用什么顺序、写社呢
第1阶段的必要元素
客户端程序的实现范例
利用"共享内存"实现——开始实现
冲突状态——使用共享内存时的注意点
锁
P2P MO和冲突状态
如何防止P2P MO实现中的冲突
同步相关的实现范例
列举可动物体和类设计
将基本行为处理矩阵化
PlayerCharacter处理的规范化
Enemy处理的规范化——Enemy/Create
Bullet处理的规范化
如何针对共享内存写代码——共享内存型和RPC型的比较
RPC型——C/S MMO的情况
共享内存型——P2P MO的情况
RPC型的代码量——move(5,5)
共享内存型的代码量——move(5,5)
共享内存型的优势和弱点
[补充]代码能写得干净些吗?
SyncValue类
专栏 关于数据中心的地理位置分散
5.6 支撑C/S MO游戏的技术 [补充]
C/S MO和NAT的问题
什么是NAT?什么是NAT问题?
NAT的遍历——跨越NAT建立信道的技术
NAT遍历技术的极限
使用NAT遍历技术的更多缺陷
现实的NAT问题的解决办法
中继服务器
中继服务器的代价
(1)延迟变大的问题
(2)服务器带宽消耗的问题
5.7 总结
第6章 网络游戏的辅助系统——强化服务时不可缺少的系统
6.1 辅助系统所需的各种功能
从现有服务看辅助系统的功能
通用
游戏机用
面向浏览器游戏的功能
现有服务的功能一览
基于Web的开发方法和C/S型的开发方法
6.2 通信辅助系统
玩家匹配[P2P MO]
让多人参加P2P MO游戏的条件
匹配服务器
实现多人游戏的两个条件的具体化——以J Multiplayer为例
实现多人游戏的两个条件的实现——以J Multiplayer为例
匹配结果画面
游戏大厅[P2P MO]
游戏大厅和匹配
星际争霸2的例子
实现要点
中继服务器[P2P MO]
中继服务器所需的性能
聊天[P2P MO] [C/S MMO]
自己实现聊天系统
自己实现聊天系统的基本行为
消息同报(?)的规模
邮件[P2P MO] [C/S MMO]
好友列表 [P2P MO] [C/S MMO]
在线状态 [P2P MO] [C/S MMO]
游戏服务的在线状态的特点
在线状态的实现
日志服务器 [P2P MO] [C/S MMO]
日志服务器的实现
黑名单 [P2P MO] [C/S MMO]
黑名单的实现
语音聊天 [P2P MO] [C/S MMO]
6.3 游戏客户端的实现的辅助系统
游戏成绩管理 [P2P MO] [C/S MMO]
关于游戏成绩管理的实现
存储功能 [P2P MO]
(游戏客户端的)升级 [P2P MO] [C/S MMO]
升级的基本功能
升级的访问模式
实现升级功能的要点
排名 [P2P MO] [C/S MMO]
排名功能的实现——网络游戏的特殊要求
临时排名法
6.4 运营辅助系统
新闻推送 [P2P MO] [C/S MMO]
新闻推送的原理
6.5 收费相关辅助系统
收费认证 [P2P MO] [C/S MMO]
网络游戏的收费
收费的原理
收费的时序
使用收费公司的优点
虚拟点数管理 [P2P MO] [C/S MMO]
P2P MO的情况,C/S MMO的情况
专栏 C/S MMO游戏的收入
6.6 其他辅助功能
游戏数据查阅/搜索工具 [P2P MO] [C/S MMO]
游戏数据的保存状态
干净的保存状态、脏的保存状态
使数据容易被机器和人阅读
关键字搜索的技巧
游戏设置数据和数据库
世界过滤器 [P2P MO] [C/S MMO]
6.7 总结
第7章 置成网络游戏运营的基础设施——构建,负载测试,运营开始
7.1 基础设施构建的基础知识
C/S MMO和P2P MO的基础设施(复习)
基础设施构建的必要工作——从开发整体上俯视
基础设施的成本和预算
成本的感觉、单位
网络游戏服务器在某种程度上能忍受的条件
硬件,信息机器
服务器
存储系统
网络交换机
路由器/防火墙
软件
服务器操作系统
DBMS
病毒扫描软件
虚拟化软件
数据中心相关
数据中心使用费
数据中心构建费用
服务(除了数据中心相关服务之外)
服务器监视服务
域名使用费,电子签名服务费
线路使用费
电力费用
7.2 面向开发者的基础设施构建知识
服务规模的扩大/缩小——用户数量和基础设施的必要规模
典型的环境
预算困难的条件
负载曲线
最初以繁忙时为前提进行设计
K Online的情况
J Multiplayer的情况
面向开发者的基础设施构建要点
服务器部署
维护时间和自动化部署
上线测试环境(staging)
网络游戏的特殊注意点
服务器监视,死活监视
日志输出/管理
保留日志的策略——"尽可能全部保存"并且"保存原因和结果"
日志输出的方法——建议组合,syslog的问题
日志服务器
7.3 K Online,J Multiplayer的基础设施构建
K Online的基础设施
alpha测试
封闭beta测试
开放beta测试
J Multiplayer的基础设施
自己实现部分辅助系统
首先进行负载验证,估算基础设施
同时在线人数、登录用户数——以排名为例来看看典型的负载验证步骤[1]
预测游戏行为模式(style)——以排名为例来看看典型的负载验证步骤[2]
将负载验证的结果反映到设计中
7.4 负载测试
负载测试的准备
K Online的线上环境负载测试
K Online的测试场景(scenario)
测试的分割
负载测试的必要环境
负载测试使用的服务器监视命令
vmstat,/proc/interrupts
ps
top
netstat
J Multiplayer的线上环境负载测试
J Multiplayer的测试场景(scenario)
负载测试所需的环境
7.5 运营开始
运营开始之前——再确认一下安全设置
针对系统外部攻击的安全
针对系统内部管理方法的安全
运营开始之后——系统监视
将几十台服务器分组
故障发生时的应对方案
7.6 总结
8. 网络游戏的开发体制——团队运营上的课题
8.1 游戏企划内容和开发团队——网络游戏特有的课题
"游戏企划内容"是团队运营的关键
数据持久化的程度
运营开始后的3个月最艰难,而运营要持续5~10年
游戏运营和技术者
实际项目管理中的课题
游戏中玩家之间的关系
游戏结果的共享范围
聊天系统的内容
维护和升级时间表
源代码的规模——迭代太多就会隐藏问题
构建时间
源代码的启动时间
测试的行数
服务器程序的启动步骤
数据验证
8.2 网络游戏开发团队的实际情况——一般软件开发也有的通用课题
工作分配
网络游戏程序员持续提升技能的方法
从提高武艺的“守、破、离”学习
守阶段——从模仿开始
破阶段——学术研讨会,会议,超越境界
离阶段——工程师的自我提升,然后……
项目管理手段——游戏开发和scrum
开发环境的选择
项目移交——理所当然的事情也要刨根问底
测试准备
开发环境的构建时间要很短
适当安排信息安全
8.3 总结
专栏 网络游戏的开发成本感觉
原书介绍(日文):http://gihyo.jp/book/2011/978-4-7741-4580-8
豆瓣链接:http://book.douban.com/subject/6013773/
原著:中嶋謙互
A5/624页
目录
第0章 [快速入门]网络游戏编程——网络和游戏编程的技术基础
0.1 以网络游戏编程为目的的网络编程基础
网络编程是必须的(!)
网络编程、互联网编程
互联网编程的历史和思想
OSI参考模型——透明地处理标准和硬件的变化
网络游戏系统和分层
第4层多采用TCP,没必要直接操作第3层以下
第5层由游戏自己实现
套接字API的基础知识
网络游戏和套接字API——使用第4层的套接字API
面向连接(流式)和无连接(数据报式)
专栏 网络编程的特点和游戏形式的关系——对服务器、客户端的性能和功能要求
0.2 套接字编程入门——处理多个并发连接,追求性能
通信链路的确定(复习)
套接字API的基础——简单的ECHO服务器、ECHO客户端的例子
TCP通信链路的状态迁移和套接字API
处理多个并发连接——通向异步套接字API之路
线程方式的处理负载问题
单线程,非阻塞,事件驱动——用select函数进行轮询
网络游戏的输入输出实现的特点——单线程,事件驱动,非阻塞
网络游戏和实现语言
发挥性能和提高开发效率——从实现语言到底层
网络游戏的特殊原因导致的语言性能差异
发挥多核心服务器的性能
专栏 输入输出实现的方针和未来提高性能的可能性
上下文开关——保存CPU的设置状态
多核心服务器上不要跑过多的服务器进程
多核心服务器和网络吞吐量——有网络游戏和小数据包
以太网的帧
各个网络层的头
多核心服务器的数据发送能力
简化服务器实现——libevent
libevent的特点
0.3 RPC指南——最简单的通信中间层
通信库的必要性
以固定格式发送接收信息
网络游戏采用的RPC的整体结构
自动生成RPC桩代码的RPC工具
网络游戏和二进制数据交换格式/库
[补充]UDP的使用方法
0.4 游戏编程的基础
游戏编程的历史
“只要能画点就能作出游戏!”用路线(?)做的小蜜蜂游戏
来看看伪代码!游戏编程基础解剖
初始化
无限循环
各sprite的动作——游戏逻辑的主体
描绘
子过程
游戏编程进阶——不使用线程的“任务系统(Task system)”
两种编程方法的相似性——不使用线程
0.5 总结
专栏 保证开发效率和平台间的可移植性
第1章 网络游戏的历史和发展——游戏加入了“网络”元素!
1.1 网络游戏的技术史
网络游戏的历史还不足50年
1950年以前:计算机出现
20世纪50年代:最早的视频游戏
20世纪60年代:具有影响力的各种机器出现
20世纪70年代:网络游戏的基本要素成型
20世纪80年代:网络对战游戏出现
20世纪90年代:游戏市场扩大
21世纪00年代早期:网络游戏业出现
21世纪00年代后期:浏览器上的MMOG商业的成功
2010年以后:会出现什么呢?
1.2 从技术变迁来看游戏文化和经济圈
解读技术变迁图
三个圈子(类别)
黑客文化圈
家用机/街机游戏商业圈
微软圈
两个游戏经济/文化圈
文化经济和技术的关系
1.3 总结
专栏 网络游戏获得商业成功的条件
第2章 网络游戏是什么?——从各种角度审视“网络游戏”
2.1 网络游戏术语的定义
网络游戏的4个侧面
2.2 网络游戏的物理面
物理组成元素
物理模型/物理网络结构
本书讨论对象为互联网上的网络游戏
2.3 网络游戏的概念面
网络游戏的基本结构
游戏的基础——反复出现的认知、判断和操作
视频游戏的原理
游戏的空间——游戏所需的各种信息
游戏的进展——游戏空间的变化
共享相同的游戏进展
共享是可能的
2.4 网络游戏的商业面
从商业上提出的要求
有效地招募测试玩家——网络游戏和测试
封闭测试(CBT)
公开测试(OBT)
不断更新——网络游戏的运营和更新你
(1)定期的补丁
(2)大型补丁(扩展包、附加包)
(3)紧急维护
节约服务器台数和带宽——网络游戏费用的特殊性
(1)人力成本(2)设备成本——运营:发售之后的成本很高
服务器成本预算——估算服务器损坏的概率
线路成本的预算——尽可能节省带宽
从小规模开始,保证可扩展性——将风险降到最低,同时不要错过发展机会
提供多种收费方式——收费结算的变化
游戏点数出现——实现了收费的细分化、实时化
便捷、快速地根除攻击者——攻击、非法行为和对策
商业目的的攻击
非商业目的的攻击——各种攻击方式,3D网络游戏专用的游戏客户端
减少服务器停机的次数和时间——不要让玩家失望
(1)计划维护造成的停机
(2)故障或攻击造成的服务停止
游戏结果的反馈——日志分析和结果的可视化
游戏内的信息
(1)最高成绩排名
(2)游戏战绩
(3)其他统计
游戏战绩需要更高级的技术
更简单地与其他玩家相遇——玩家匹配
(1)自动选择
(2)专用游戏大厅
(3)虚拟世界(可视化游戏大厅)
专用游戏大厅和虚拟世界的区别
未来的玩家匹配
2.5 网络游戏的人和组织面
与网络游戏服务运营相关的人
三种功能和责任分配方式
网络游戏服务运营的三个专门功能
开发团队
必不可少的4种植业
小型团队
大型团队
从职业平衡来看游戏开发的特点——数据编写人员的比例
运营团队
服务器设施
2.6 网络游戏程序员必备的知识
网络游戏程序员必备的技术和经验
编程的基础技术
游戏编程的基础知识(网络游戏开发中是必须的,至少是有用的)
游戏客户端开发的知识
数据库知识
系统运维知识
方方面面的网络游戏开发知识
2.7 支撑网络游戏的技术的大分类
支撑网络游戏技术的4种形式
C/S型和P2P型——物理结构,两种典型模式
MMO型和MO型——逻辑结构,两种典型模式
网络游戏的4中形式——物理结构x逻辑结构
2.8 关系到开发费用的技术要点
网络游戏和现在的开发方法
支撑网络游戏本身的3大轴心
游戏的数据额是
游戏的通信方式
游戏的反应速度
2.9 总结
专栏 网络游戏编程的最大难点——解决冗余化和异步的问题
第3章 网络游戏的架构——挑战游戏趣味性和技术限制
3.1 游戏编程的特点——保持快速响应
响应速度的重要性——时间总是不够的!
内存存放数据的重要性——艰难痛苦的游戏编程(!?)
(1)每16毫秒变化一次——处理的信息大小
游戏进度所必须的信息及其大小
能用RDBMS实现吗?——与内存存放数据比较
(2)显示大量对象——CPU的处理能力
家用计算机和CPU时钟周期
Play Station 3(PS3)和时钟周期——能用RDBMS方式开发吗?
(3)无法预测玩家的操作——千变万化的游戏状态
RDBMS方式无法实现的信息量和处理速度
必须将游戏进度的数据与CPU放在同一台机器上
3.2 网络游戏的特殊元素
通信延迟——延迟对游戏内容的限制
通信时间的具体内容
无法避免的延迟——延迟和游戏流派
带宽——通信量的标准
服务器——成本、服务器数量的估算
安全——网络游戏的弱点
作弊——最大的安全隐患
为何要作弊?
作弊行为的手段
作弊的操作对象
冯诺依曼型计算机的宿命——防止作弊行为的服务
认真面对——作弊行为的波及效果
辅助系统(周边系统)
3.3 物理架构详解——C/S型,P2P型
基本网络拓扑结构
实际使用的有星型(和总线型)、全网格型——把通信延迟降至最低
物理架构的种类
C/S型——纯服务器型,反射型
反射型
P2P型
NAT遍历
C/S+P2P混合型
ad-hoc模式
专栏 游戏客户端是什么?
3.4 逻辑架构详解——MO型
MO、MMO是什么?——同时在线玩家数的区别
MMO和MO的混合
MO型,MOG
同步式——获得全员的信息之后游戏才能继续
同步式/全网格型的实现——所有终端都持有主数据
各终端(玩家)发送接收的信息内容
同步式/全网格型的必要条件和优势
同步式/全网格型的3个问题——在通信网络上发送和接收消息的脆弱的完整性,中途加入游戏
对通信线路的依赖性
瓶颈在最慢的终端上
同步式/星型的实现——将输入信息先存到服务器上
星型的4个问题
同步式不可避免的重大问题——无法中途加入游戏
同步式的有时和解决问题的方法
异步式——接受各终端上游戏进度不统一的状态
异步实现方针的制定方法——必须详细分析游戏内容
3个基本元素:自己、对手、环境——异步实现的讨论指针
3个元素的关系
(1)自己和对手——对战游戏和玩家间交流数据的抽象度
格斗游戏的例子
攻击、防御、命中判定
格斗游戏的时序图
抽象度较低,必须发送表示原因的数据——对结果的接纳感
可能产生完全不同的结果!
维持结果一致性的方法——两种覆盖方式
使用造成伤害方的结果
使用受到伤害方的结果
方式选择的原则——增大玩家的总体满意度
(2)自己和环境——可使用物品的格斗游戏和互斥控制
需要互斥控制的环境元素——冲突的资源“炸弹”
不需要互斥控制的环境元素——不会减少的资源“水”
游戏中的环境元素很难处理——必须详细理解游戏内容
互斥控制的实现——采用与同步式类似的原理实现异步式
物品复制问题
给物品赋予唯一的ID——判断物品是否被复制,发生的问题
物品复制的应对策略——由专门的软件负责协调
协调软件的基本功能和使用方法
炸弹之外的环境元素
状态会自动变化的环境——静态环境和动态环境
动态环境产生的问题——很难完全并行管理
动态环境引发的问题的可能的解决方案
(3)对手和环境的关系
3.5 逻辑架构详解——MMO型
MMO型,MMOG——在大量玩家之间共享长期的游戏进度
什么是连续?——玩游戏所需的时间和积累性
连续的数据,保持积累的大量数据的一致性的难度
客户端和服务器完全分离
MMOG的原理
MMO型的实现方针——浏览器式,纯粹的C/S模型
浏览器式和同步式、异步式的区别
MMO型中的服务器、客户端的功能
服务器处理——在服务器上推进游戏
MMO型的课题
3.6 总结
专栏 改善浏览器方式下图形显示延迟的方法
第4章 [实践] C/S MMO游戏开发——长期运行的游戏服务器的存在
4.1 网络游戏开发的基本流程
对象的资料和成果
准备和初期实现同时进行
进行开发和准备资料的流程
技术人员的资料和成果
4.2 C/S MMO游戏的倾向和对策
C/S MMO游戏的特点
C/S MMO型(MMO型)的游戏内容
C/S MMO型的限制
4.3 企划资料和5种设计资料——在空想游戏《K Online》的开发中学习
寻找示例游戏的题材
企划详细资料
企划详细资料的必要性
MMOG宏大的游戏设定
5种设计资料
设计上的重要判断
4.4 [1]建立系统基本结构图
系统基本结构图的基础
服务器系统比句具有可扩展性——确认商业模型
各种瓶颈——选择扩展方式
专栏 MMO客户端特有的绘图性能瓶颈——游戏客户端的瓶颈
消除游戏服务器/数据库的瓶颈
如果什么都不做的话(一台服务器负责整个游戏世界)
空间分割法——消除游戏服务器的瓶颈
空间复制
副本法——消除游戏服务器的瓶颈
平行世界法——消除数据库的瓶颈
最容易产生瓶颈的就是数据库写入操作
平行世界方式中的数据库分割
平心世界方式引发的问题
同时采用多种手段——应对越来越多的用户
各种方式的引入难度
每个世界的数据库(游戏数据库)服务器的绝对性能的提升
应用层面的技巧
K Online的设计预算——首先确认并行连接数
确认瓶颈
设计预算时考虑问题的原则
根据游戏逻辑的处理成本进行预算——敌人的行动算法需要耗费多少CPU
根据游戏数据库的处理负载进行预算——找出角色数据保存频率和数据库负载的关键点
可扩展性的最低讨论结果,追求进一步的用户体验
服务器的基本结构,建立一个系统基本结构图
4.5 [2]建立进程关系图
[2]准备进程关系图
服务器连接的结构——仅使用空间分割法
服务器连接的结构——结合使用平行世界方式和空间分割法
使用平行世界方式时规模扩展的关键
4.6 [3]建立带宽/服务器资源计算资料
以进程列表为基础估算服务器资源
以CPU为中心的服务器,以存储为中心的服务器
估算服务器资源的成本——从初期费用开始
服务器资源的维持成本
估算带宽成本
98%的通信量为玩家/NPC的移动通知
带宽减半的方针——首先调整企划,然后在程序上下功夫
调整企划——带宽削减方案1
在程序上下功夫——带宽削减方案2
重新审视企划内容是削减带宽的好办法
4.7 [4]建立协议定义资料——协议的基本性质
[4]协议定义资料的基础
"协议的基本性质"的关键
协议种类和进程关系的种类
8种协议
C/S MMO采用TCP
"协议的基本性质"的对应一览
协议设计的基本策略
4.8 [4]协议定义的资料——协议的API规格(概览)
协议实现的原则
后端实现基本/通用功能,前端实现专用功能
前端依赖于后端的结构
协议仅仅是设置状态和简单的操作
外部异常等现象在一个地方处理
优秀API的调用时序图——不调用才是优秀!?
8种协议的功能/形态概要
gmsv协议
loginsv协议
msgsv协议
dbsv协议
worldsv协议
commondbsv协议
authsv协议
logsv协议
4.9 [4]协议定义的资料——协议API规格(详细)
制定协议API规格(详细)
API函数定义
gmsv协议
API类型和消息的特性
loginsv协议
msgsv协议
dbsv协议
worldsv协议
commondbsv协议
authsv协议
logsv协议
常量定义
API的调用时序图
必要的时序图——多个进程相关的典型处理是什么?
(1)认证
(2)gmsv创建角色
(3)gmsv,msgsv进行登录
(4)从gmsv中推出
(5)用gmsv移动角色
(6)用gmsv操作角色的物品(商店,交易)
(7)用msgsv从好友列表中添加/删除好友
(8)给在线好友发消息
建立时序图的要点
4.10 [4]协议定义的资料——报文格式
C/S MMO主要使用TCP协议(复习)
C/S MMO采用二进制协议,使用专用的字节序列
二进制协议的实现——先来整理下术语
记录的大小
协议头
数据部分的压缩和加密
实现上的技巧
专栏 C/S MMO的压缩和加密
4.11 [5]数据库设计图
重要的表的设计要在编程之前进行
C/S MMO的数据库实现的历史变迁
70年代~80年代:无数据持久化,复活咒语
90年代:保存到文件中
2000年代前期:RDBMS
整理K Online必须的表
专栏 百花缭乱的KVS
未来C/S MMO中的数据库的用法
需要持久化的信息,数据的包含关系
数据特性,个别表的尊卑
数据库性能预测
预测数据库的处理性能
表的特点,需要注意的表
查询的内部——read篇
查询的内部——write篇
4.12 服务器/客户端软件+中间层——实践中必不可少的开发基础设施
网络游戏的中间层
C/S MMO的中间层
全装备型中间层
小型MMOG中间层
仅通信中间层
开发基础设施软件——可以立即体验的C/S MMO开发体验
服务器相关软件
客户端相关软件
4.13 编写程序时的基本原则
编程开始的方法、继续的方法
数据结构优先的原则——基本原则[1]
视频游戏中的数据分类
数据结构实现之前的讨论——在画面上出现/不出现的元素
敌方角色和POP设定
维持可玩状态的原则——基本原则[2]
后端延后原则——基本原则[3]
持续测量原则——基本原则[4]
客户端开发中的持续测量的例子
服务器开发中的持续测量
4.14 C/S MMO游戏“K Online”的实现——开始编程!
开发阶段
K Online中的分工计划
K Online中的里程碑和原型阶段设置
[第1步~第2步]里程碑和原型的阶段
准备骨架代码
[1]autocli
[2]cli
专栏 每一步的进度管理形式
[3]协议
[4]ID
[5]gmsv
[6]dbsv
“跑一下才知道怎么回事!”——游戏开发的特殊性
典型的困难——企业中的网络游戏开发
专栏 关于C/C++之外的语言
骨架的整体形态
cli中
gmbs,dbsv,proto中
专栏 VCE是什么?
按照什么顺序写代码?
首先编写协议定义文件k.xml——开发流程[1]
协议定义的要点
确认通信是否畅通:ping函数
帐号登录和帐号认证:signup函数,authentication函数
角色创建:createCharacter函数
登录函数:login函数
地上移动:move函数,moveNotify
以方格为单位
路线搜索和实际的移动处理
移动路线的发送方法——优先发送最终结果
移动结果的统治范围
moveNotify函数
attack函数,attackNotify函数
编写gmsv/Makefile——开发流程[2]
从示例中复制gmsv/climain.cpp和gmsvmain.cpp——开发流程[3]
sv.cpp中实现signup函数
专栏 自动生成dbsv服务器代码——简化后端服务器实现
dbsv 1次往返型的请求和线程
自动测试客户端autocli的实现——开发流程[4]
测试的状态迁移
autocli的main()函数
signup()函数
专栏 gmsv中的线程使用等
图形客户端cli的创建和执行确认——开发流程[5]
SDL
绘制图形
执行确认
实现字体显示
出现敌人,追赶敌人
击败敌人,获得经验值
保证以后能继续游戏——保存游戏状态
骨架之后的开发——开发的流程,未来……
4.15 总结
第5章 [实践] P2P MO游戏开发——不使用专用服务器实现动作游戏
5.1 P2P MO游戏的倾向和策略
P2P MO和动作游戏——游戏状态变化频率很高
RPC型实现和共享内存型实现
P2P MO游戏的特点——与C/S MMO比较,难点
P2P MO游戏的优势
从企划开始阶段就要意识到“多人游戏”
5.2 从空想游戏“J Multiplayer”的开发中学习——与“K Online”的区别
J Multiplayer——与K Online对比
P2P MO游戏开发的基本流程
P2P MO游戏开发的成果——开发阶段,各种资料
企划详细资料
与C/S MMO在数据量和规模上的区别
5.3 P2P MO游戏的设计资料
系统基本结构图
进程关系图
星型还是全网格型?
首先讨论下星型
实现中途加入游戏
带宽/服务器资源的计算资料
协议定义资料,API规格
协议的时序图
函数和常量的定义
专栏 "游戏逻辑"是什么?
估算带宽消耗
实现"600分之1"的途径——仔细研究游戏的企划内容,寻找解决方案
其他资料
5.4 服务器/客户端软件和中间层,基本原则
P2P MO开发中的成果的实际样子
P2P MO的中间层
编写程序的基本原则——P2P MO的情况
5.5 P2P MO游戏"J Multiplayer"的实现——开始编程!
J Multiplayer的分工计划
实现流程——复习下K Online
J Multiplayer开发的阶段——用什么顺序、写社呢
第1阶段的必要元素
客户端程序的实现范例
利用"共享内存"实现——开始实现
冲突状态——使用共享内存时的注意点
锁
P2P MO和冲突状态
如何防止P2P MO实现中的冲突
同步相关的实现范例
列举可动物体和类设计
将基本行为处理矩阵化
PlayerCharacter处理的规范化
Enemy处理的规范化——Enemy/Create
Bullet处理的规范化
如何针对共享内存写代码——共享内存型和RPC型的比较
RPC型——C/S MMO的情况
共享内存型——P2P MO的情况
RPC型的代码量——move(5,5)
共享内存型的代码量——move(5,5)
共享内存型的优势和弱点
[补充]代码能写得干净些吗?
SyncValue类
专栏 关于数据中心的地理位置分散
5.6 支撑C/S MO游戏的技术 [补充]
C/S MO和NAT的问题
什么是NAT?什么是NAT问题?
NAT的遍历——跨越NAT建立信道的技术
NAT遍历技术的极限
使用NAT遍历技术的更多缺陷
现实的NAT问题的解决办法
中继服务器
中继服务器的代价
(1)延迟变大的问题
(2)服务器带宽消耗的问题
5.7 总结
第6章 网络游戏的辅助系统——强化服务时不可缺少的系统
6.1 辅助系统所需的各种功能
从现有服务看辅助系统的功能
通用
游戏机用
面向浏览器游戏的功能
现有服务的功能一览
基于Web的开发方法和C/S型的开发方法
6.2 通信辅助系统
玩家匹配[P2P MO]
让多人参加P2P MO游戏的条件
匹配服务器
实现多人游戏的两个条件的具体化——以J Multiplayer为例
实现多人游戏的两个条件的实现——以J Multiplayer为例
匹配结果画面
游戏大厅[P2P MO]
游戏大厅和匹配
星际争霸2的例子
实现要点
中继服务器[P2P MO]
中继服务器所需的性能
聊天[P2P MO] [C/S MMO]
自己实现聊天系统
自己实现聊天系统的基本行为
消息同报(?)的规模
邮件[P2P MO] [C/S MMO]
好友列表 [P2P MO] [C/S MMO]
在线状态 [P2P MO] [C/S MMO]
游戏服务的在线状态的特点
在线状态的实现
日志服务器 [P2P MO] [C/S MMO]
日志服务器的实现
黑名单 [P2P MO] [C/S MMO]
黑名单的实现
语音聊天 [P2P MO] [C/S MMO]
6.3 游戏客户端的实现的辅助系统
游戏成绩管理 [P2P MO] [C/S MMO]
关于游戏成绩管理的实现
存储功能 [P2P MO]
(游戏客户端的)升级 [P2P MO] [C/S MMO]
升级的基本功能
升级的访问模式
实现升级功能的要点
排名 [P2P MO] [C/S MMO]
排名功能的实现——网络游戏的特殊要求
临时排名法
6.4 运营辅助系统
新闻推送 [P2P MO] [C/S MMO]
新闻推送的原理
6.5 收费相关辅助系统
收费认证 [P2P MO] [C/S MMO]
网络游戏的收费
收费的原理
收费的时序
使用收费公司的优点
虚拟点数管理 [P2P MO] [C/S MMO]
P2P MO的情况,C/S MMO的情况
专栏 C/S MMO游戏的收入
6.6 其他辅助功能
游戏数据查阅/搜索工具 [P2P MO] [C/S MMO]
游戏数据的保存状态
干净的保存状态、脏的保存状态
使数据容易被机器和人阅读
关键字搜索的技巧
游戏设置数据和数据库
世界过滤器 [P2P MO] [C/S MMO]
6.7 总结
第7章 置成网络游戏运营的基础设施——构建,负载测试,运营开始
7.1 基础设施构建的基础知识
C/S MMO和P2P MO的基础设施(复习)
基础设施构建的必要工作——从开发整体上俯视
基础设施的成本和预算
成本的感觉、单位
网络游戏服务器在某种程度上能忍受的条件
硬件,信息机器
服务器
存储系统
网络交换机
路由器/防火墙
软件
服务器操作系统
DBMS
病毒扫描软件
虚拟化软件
数据中心相关
数据中心使用费
数据中心构建费用
服务(除了数据中心相关服务之外)
服务器监视服务
域名使用费,电子签名服务费
线路使用费
电力费用
7.2 面向开发者的基础设施构建知识
服务规模的扩大/缩小——用户数量和基础设施的必要规模
典型的环境
预算困难的条件
负载曲线
最初以繁忙时为前提进行设计
K Online的情况
J Multiplayer的情况
面向开发者的基础设施构建要点
服务器部署
维护时间和自动化部署
上线测试环境(staging)
网络游戏的特殊注意点
服务器监视,死活监视
日志输出/管理
保留日志的策略——"尽可能全部保存"并且"保存原因和结果"
日志输出的方法——建议组合,syslog的问题
日志服务器
7.3 K Online,J Multiplayer的基础设施构建
K Online的基础设施
alpha测试
封闭beta测试
开放beta测试
J Multiplayer的基础设施
自己实现部分辅助系统
首先进行负载验证,估算基础设施
同时在线人数、登录用户数——以排名为例来看看典型的负载验证步骤[1]
预测游戏行为模式(style)——以排名为例来看看典型的负载验证步骤[2]
将负载验证的结果反映到设计中
7.4 负载测试
负载测试的准备
K Online的线上环境负载测试
K Online的测试场景(scenario)
测试的分割
负载测试的必要环境
负载测试使用的服务器监视命令
vmstat,/proc/interrupts
ps
top
netstat
J Multiplayer的线上环境负载测试
J Multiplayer的测试场景(scenario)
负载测试所需的环境
7.5 运营开始
运营开始之前——再确认一下安全设置
针对系统外部攻击的安全
针对系统内部管理方法的安全
运营开始之后——系统监视
将几十台服务器分组
故障发生时的应对方案
7.6 总结
8. 网络游戏的开发体制——团队运营上的课题
8.1 游戏企划内容和开发团队——网络游戏特有的课题
"游戏企划内容"是团队运营的关键
数据持久化的程度
运营开始后的3个月最艰难,而运营要持续5~10年
游戏运营和技术者
实际项目管理中的课题
游戏中玩家之间的关系
游戏结果的共享范围
聊天系统的内容
维护和升级时间表
源代码的规模——迭代太多就会隐藏问题
构建时间
源代码的启动时间
测试的行数
服务器程序的启动步骤
数据验证
8.2 网络游戏开发团队的实际情况——一般软件开发也有的通用课题
工作分配
网络游戏程序员持续提升技能的方法
从提高武艺的“守、破、离”学习
守阶段——从模仿开始
破阶段——学术研讨会,会议,超越境界
离阶段——工程师的自我提升,然后……
项目管理手段——游戏开发和scrum
开发环境的选择
项目移交——理所当然的事情也要刨根问底
测试准备
开发环境的构建时间要很短
适当安排信息安全
8.3 总结
专栏 网络游戏的开发成本感觉
非常好~感觉比较全,不过或许大家关心的是关于网络游戏特有的技术,不知道可不可以重点讲解~
内容相当丰满。不过有些担心这样作者会不会每个点都只讲一下下
相当有料,希望早些出版
这不是一般人能译的书... 如果没有方向全面的强人审校的话, 还是维持现状的好.
总结一下,两个质疑:一是怕每个点只讲一点,猜想A:的确有可能这样,日版书有这样的写作模式,所以可以作为游戏公司及个人自学者的培训大纲,二是这本书章节知识点并不算多,有600多页,也许写得还没那么简略,简介办法,我找来样书,让站长提前看看,也听听ls对这个质疑的意见;二是不好翻译,这确实,但审校的人选还是有,有很多这方面的牛人,沙鹰、大宝、milo等。我再提个问题,这本书的通用性如何?包括日本游戏市场和国内差异大不大,以及什么样的【游戏企业】从业者是不适合看这本书的?
八分制作, 二分维护, 0 分销售. 制作方面淡化了企画部分(这个问题太多, 说不完), 但实现企划书定义的规格所需的技术是要讲的, 这是书皮上没有写出的细层的东西. 偶是冲着下面那些词去买, 但买到的是游戏实现技术的书, 明白?
随便搜索下就知道, ringo 在 2002 年就把框架的早期版本做出来了. 现在这类方法(比如 event?)已经成为普遍的实践. 有些部分比较旧/简单, 而且是需要配合 VCE 框架使用的, 这些东西不适合国内(人家也要卖钱).
基本上是适合中小团队借助框架快速开发的样子. 大企业想必已经碰过书上所述的几乎全部的钉子.
翻译一篇书评(节选),作为参考吧。
s/2011/3/25/%E3%80%8 E%E3%82%AA%E3%83%B3% E3%83%A9%E3%82%A4%E3 %83%B3%E3%82%B2%E3%8 3%BC%E3%83%A0%E3%82% 92%E6%94%AF%E3%81%88 %E3%82%8B%E6%8A%80%E 8%A1%93%E3%80%8F-%E8 %AA%AD%E4%BA%86
http://sklave.jp/log
.....
阅读本书之前以为它讲的是网络游戏的服务器实现。读完之后才发现,其实它是本介绍网游(从MMORPG、RTS一直讨论到浏览器游戏)的设计、估算、实现所需的方法论。
也就是说,这本书凝聚了作者中岛先生从1998年就职于Lifestorm后,为日本网游贡献的大半生的智慧结晶。太超值了!
....
本书介绍了C/S型(如魔兽世界、反恐精英等游戏,以及所有浏览器游戏)和P2P型(帝国时代、星际争霸等游戏)的设计、估算、实现、运营等,介绍了作者的经验和建议,还融入了新技术。特别是这本书对于估算和运营的介绍,单凭这些内容就值得购买。
最有意思的是游戏逻辑设计的相关章节、通信速度和性能估算、调优等章节以及有关开发团队的章节。也有不足指出,如NAT遍历等内容其实不用介绍得太深入。
....
fcicq后来说的比较中肯,我也是冲着那些词,还真怕是本纯粹技术实现的书,这方面各公司跨度很大,百花齐放,不容易形成共识。但即使是个方法论,如果已经成为业界共识,各企业可以自行总结和向新人传递,就削弱了这本书的价值。那么,日本有没有比这本更适合引进的游戏用书?印象中有一本好评度更高,但内容特色上没有这本吸引人的一本。利弊参半,总体评价,这到底是一本有瑕疵的好书,还是一本有亮点的坏书?所谓好坏,指的是国内的适用性……
只能说, 不会红的... :D 这个风险太大...
差一步赶不上, 你把这些书拿来也没用.
非常遗憾的是大规模被当成了架构书. 如果偶能预见到这一点的话, 这本书根本就没有必要拿来.
没那么严重,只是个别人那么归类罢了……
> 我来回应