文档章节

游戏开发中的数据表示

o
 osc_pn11u1x9
发布于 2018/08/06 11:31
字数 768
阅读 12
收藏 0

声明:本文内容源自腾讯游戏学院程序公开课_服务端

一、数据表示的基础

什么是数据表示?

数据是信息的载体。

数据表示是一组操作,可以描述、显示、操作信息。

 

数据表示的要素

IDL - 接口描述语言

  • IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;

Data - Operation - 数据操作支持

  • serialize(序列化)
  • deserialize(反序列化)
  • visualize(可视化)
  • transform(转化)
  • compression(压缩):数据运行时。

 

Version Control - 版本控制支持

  • 数据可以有不同版本,且版本间可按照一定规则兼容

 

业界现状

  • Google Proto Buffer (Protobuf)
  • Apache Thrift Binary Protocol
  • Tencent Data Representation (TDR)

 

Protobuf In Action

Protobuf具体的使用

通过IDL语言去定义一个.PROTO文件,然后PROTOBUF会对各个平台提供PROTO C这么一个编译器,然后PROTO C编译器我们可以指定我要生成对应的C#的DR的表示还是对应的C++的DR表示。

一个学习的机会:编译一个自己熟悉的语言,比如用PROTOBUF编一个点.c和.cpp文件出来,它里面怎么操作数据的,怎么压缩数据的,整个步骤都是可以看到的。

 

二、数据表示在游戏开发中的应用

游戏开发 - 协议(以天刀为例)

  • 交互内容复杂:多重嵌套结构体/二进制数据。
  • 协议数量巨大:4000+条协议定义;13000+结构体定义。
  • 变更频繁
  • 网络流量巨大

 

游戏开发 - 协议管理

 

游戏开发 - 异构系统协议交互

多类型终端协议交互

  • server:Linux / x86 / C++
  • client:PC / iPhone / Android;C++ / C# / lua

 

游戏开发 - 协议版本兼容

 

游戏开发 - 协议流量优化

流量优化:通过DR提供的数据压缩功能进行流量优化。

 

游戏开发 - 数据存储的特点

  • 数据结构复杂:每个玩家的存储涉及到成千上万个字段;
  • 数据结构不稳定:每次版本更新有可能会新增字段或扩大原有字段;
  • update > read > insert > delete。

 

游戏开发 - 数据存储设计

Key - Value数据存储模型

  • Key - 角色ID
  • Value - 二进制角色数据
  • MySQL Blob

使用DR管理Blob数据

  • 数据序列化/反序列化
  • 数据兼容
  • 数据压缩

我们存盘的时候就是把玩家的数据先serialize成我们的DR描述的中间格式,然后存到DB里面,DB里面再读取出来然后再恢复成我们的runtime格式

 

三、感受

刚开始概念会介绍的比较多,可能讲概念大家比较难以理解,但是做一个东西还是首先要明白基础概念的定义,后面在基础概念的定义上进行展开

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在云函数 SCF 里为 Next.js 跑 SSR

很多时候我们都希望首屏速度快,SEO 友好,那么相比于客户端渲染,SSR 渲染将是这方面的优势。Next.js、Nuxt.js 都是 SSR 框架。本篇文章将介绍 Next.js。 通常我们在部署 SSR 的时候,会担心...

腾讯云Serverless
40分钟前
19
0
一文带你初窥软件测试行业

三大原始问题一——软件测试是什么? 在一定条件下对软件系统进行审核、运行、评估,检验软件系统是否满足规定需求或者找出预期结果与实际结果之间的差别。为软件产品的质量和评价提供依据。...

a伟正是在下
48分钟前
17
0
如何避免APK文件的反向工程? - How to avoid reverse engineering of an APK file?

问题: I am developing a payment processing app for Android, and I want to prevent a hacker from accessing any resources, assets or source code from the APK file. 我正在开发适用......

富含淀粉
50分钟前
13
0
python 抓取 微信公众号文章

1、下载 Fiddler 安装 具体操作传送门 2、第一步已完成,入门开始吧 首先确保有微信客户端(推荐PC,移动端会多一些操作) 启动微信、Fiddler ,然后找到需要抓取的公众号(还是关注一下吧,...

acclea
今天
9
0
JS深拷贝

let arr1 = [1, 2, 3, 4, { name: 'hh'}]/浅克隆****/// 1,展开运算符let arr2 = [...arr1]// 2.splicelet arr3 = arr1.splice(0)/深克隆****/// 1.基...

何祯粮
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部