《网络游戏核心技术与实战》笔记-1
网络和游戏编程的技术基础
网络分层结构
游戏开发的传输层大多使用TCP协议,不需要直接操纵网络层一下的分层。
应用层需要在游戏中予以实现。
高性能,高功能服务器的特性 —- 网络游戏所需具备的要素
- 小带宽
- 极高的连接数
- 低延迟
- 稳定
套接字
TPC通信链路的状态迁移和套接字API
- socket()
- connect()
- bind()
- listen()
- accept()
- read()/write()
处理并发连接的方法
- 每次连接时启动一个进程
- 实行异步的多重输入输出(多重I/O)
使用线程并行进行同步处理
网络游戏输入输出的特定 —- 单线程、非阻塞、事件驱动
libevent的特点
- 使用套接字出与某个自定状态时(可以writ、也可以read、可以accept),调用实现指定的函数。
- libevent库会自动选择各个OS中最高效的方法(比如,在Linux中套接字数量很多时,选择epoll函数等)来轮询当前状态。
- 应用程序用事先设置的函数调用(成为回调函数)来获取这一结果,在回调函数中十级执行read,accept等本来应该在等待的函数。
RPC
自动生成RPC存根代码的RPC工具
网络游戏和二级制数据交换格式/库
网络游戏及其基本结构
游戏的基础 —— 认知、判断、操作的重复
网络游戏与测试
- 封闭测试(CBT)
- 公开测试(OBT)
不断更新 —— 网络游戏的运营和更新
- 定期的补丁
- 大型补丁(拓展包、追加包)
- 紧急维护
游戏空间划分
- 空间分割(地图分隔)
- 平行世界(多服务器/区)
- 实例化(副本)
服务器功能性划分
名称 | 缩略语 | 用途 |
---|---|---|
客户端 | gmsv | 运行在用户客户端上 |
登陆服务器 | loginsv | 用于广利游戏数据的逻辑 |
数据库服务器 | loginsv | 登陆,负责服务整体使用情况的管理、解压缩以及解密等处理,减轻游戏服务器的负荷 |
反向代理服务器 | proxy | 接受连接,负责进行TCP会话本身的管理、解压缩以及解密等处理,减轻游戏服务器的负荷 |
消息服务器 | msgsv | 用于使网上聊天、即时消息、公会等社交活动能够跨越平行世界和空间分割来进行消息交换。 |
世界服务器 | worksv | 使用空间分割的情况下,属于该世界的所有gmsv连接至这个服务器进程,负责 |
通用数据库服务器(整体通用的数据库服务器) | commondbsv | 用于实现所有世界都需要的内存处理,实时统计处理和等级排名等处理 |
服务器硬件规格
- 以CPU为中心的服务器:CPU较快,内核较多,内存一般,容错性低。一次性的。
- 以储存为中心的服务器:CPU一般,内核一般,内存高,储存量大,容错性高。使用期长。
一般游戏需要持久化的信息
- 用户(id、密码、计费方式等)
- 角色(体力、经验、金钱、当前位置,名字等)
- 技能
- 任务日志 (正在进行、已完成)
- 拍卖
- 好友列表
- 邮件
- 公会
- 日志
路径搜索和实际的移动处理
阶段1:玩家自己进行移动路径的计算,实际的移动也在客户端进行,服务器无法限制地接受
阶段2:与阶段1相同,但是在服务端加入一项限制:限制移动请求的接受频率
阶段3:与阶段1相同,但是在服务端加入一项限制:限制移动请求的接受频率
阶段3: 与阶段2相同,但是在move函数中加入客户端的发送时间,一起发送给服务器
阶段4:服务端进行路径搜索和移动处理
阶段5:在客户端中只进行路径搜索中的搜索处理
移动路径的发送方式 —- 优先发送最终结果