《网络游戏核心技术与实战》笔记-1

《网络游戏核心技术与实战》笔记-1

网络和游戏编程的技术基础

网络分层结构

游戏开发的传输层大多使用TCP协议,不需要直接操纵网络层一下的分层。

应用层需要在游戏中予以实现。

高性能,高功能服务器的特性 —- 网络游戏所需具备的要素

  1. 小带宽
  2. 极高的连接数
  3. 低延迟
  4. 稳定

套接字

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:在客户端中只进行路径搜索中的搜索处理

移动路径的发送方式 —- 优先发送最终结果