游戲開發中的數據表示

聲明:本文內容源自騰訊游戲學院程序公開課_服務端

一、數據表示的基礎

什么是數據表示?

數據是信息的載體。

數據表示是一組操作,可以描述、顯示、操作信息。

?

數據表示的要素

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格式

?

三、感受

剛開始概念會介紹的比較多,可能講概念大家比較難以理解,但是做一個東西還是首先要明白基礎概念的定義,后面在基礎概念的定義上進行展開

?

轉載于:https://www.cnblogs.com/OctoptusLian/p/9429351.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

29--反轉字符串

文章目錄1.問題描述2.代碼詳情1.問題描述 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中…

什么是臨界區

臨界區[1] 指的是一個訪問共用資源(例如:共用設備或是共用存儲器)的程序片段,而這些共用資源又無法同時被多個 線程 訪問的特性。當有線程進入臨界區段時,其他線程或是 進程 必須等待(例如:bo…

BZOJ 2957 樓房重建 (分塊)

題解:分塊,然后暴力維護每一塊上升序列,注意是不是最長上升序列,二分查找第二塊中大于第一塊的最后一個上升序列中的數。 注意:每一塊的大小不要用√n會T掉的,把塊的大小設為500-600都可以(T了一…

OpenBSD 5.1 正式版發布

OpenBSD 開發團隊于近日發布了 5.1 正式版。 OpenBSD是一個從NetBSD衍生出來的類Unix操作系統。項目領導人Theo de Raadt在1995年發起了OpenBSD項目,希望創造一個注重安全的操作系統,此外OpenBSD也以高品質的文件、堅持開放程式碼以及嚴格的軟件授權著名…

Spring事務傳播行為7種類型 --- 看一遍就能記住!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、Spring 事務傳播行為一共有7種類型,主要分為3類: 1)支持當前事物、 2)不支持當前事…

PowerShell變量——PowerShell三分鐘(七)

有了前面的PowerShell基礎,今天我們來學習一個可以極大提升PowerShell效率的用法——變量簡答來說呢,變量就是在內存中的一個帶有名字的盒子~~~~~你可以把所有想存放的東西都放到這個“盒子”里。然后通過名字去訪問這個盒子。在訪問過程中,可…

Machine Learning - Coursera week6 Evaluating a learning algorithm

Evaluating a learning algorithm 1. Design what to do next 在預測房價的學習例子,假如你已經完成了正則化線性回歸,也就是最小化代價函數J的值。假如在你得到你的學習參數以后把它應用到放到一組新的房屋樣本上進行測試,發現在預測房價時產…

Tiny Core Linux 4.5 發布,微型 Linux 操作系統

世界上最小的Linux桌面發行版——Tiny Core Linux 今天發布了4.5版本。Tiny Core Linux是一個基于Linux2.6版本內核,采用BusyBox、Tiny X、FLTK 和其它小型軟件構筑的帶圖形用戶界面的微型Linux操作系統。由于體積很小,大約10MB,故采用整體裝…

30-- 返回倒數第 k 個節點

文章目錄1.問題描述2.代碼詳情1.問題描述 實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。 輸入: 1->2->3->4->5 和 k 2 輸出: 4 2.代碼詳情 設置快和慢兩個指針,初始化時快指針比慢指針多走k-1步…

maven的web工程打包為war并部署到服務器

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.在maven工程上右鍵 --> export --> 選擇WAR file --> next 2. 點擊Browse... 選擇導出后存放位置 3. 將工程名改為ROOT.war…

使用線程池的好處

第一:降低資源消耗。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。第二:提高響應速度。當任務到達時,任務可以不需要等到線程創建就能立即執行。第三:提高線程的可管理性。線程是稀缺資源,如果無限制的創建…

5.19 - Stacks and Queues

Decode Stringk[encoded_string] 的編碼字符串,將編碼的字符重復k次,最后打印出一個完整的字符串。 思路:使用棧結構,由里層向外層,層層解碼,當遇到了[ 字符時,向stack當中添加元素,…

Hive筆記之嚴格模式(strict mode)

Hive有一個嚴格模式,在嚴格模式下會對可能產生較大查詢結果的語句做限制,禁止其提交執行。 一、切換嚴格模式 查看當前的模式:hive> set hive.mapred.mode; hive.mapred.mode is undefined 未定義即為false,即no-strict模式。 …

Notepad++ 6.0 發布,優化了大文件加載性能

開源編輯器Notepad今天發布了最新的6.0版本。 Notepad 是一款免費的開源跨平臺代碼編輯器。它支持包括中文在內的多國語言,功能強大,除了可以用來制作一般的純文字說明文件外,也可以作為代碼編輯器。Notepad不僅可以實現語法高亮顯示&#x…

31-- 二叉搜索樹的范圍和

文章目錄1.問題描述2.代碼詳情1.問題描述 給定二叉搜索樹的根結點 root,返回 L 和 R(含)之間的所有結點的值的和。 二叉搜索樹保證具有唯一的值。 示例 1: 輸入:root [10,5,15,3,7,null,18], L 7, R 15 輸出&…

java中 flush()方法

一般主要用在IO中,即清空緩沖區數據,就是說你用讀寫流的時候,其實數據是先被讀到了內存中,然后用數據寫到文件中,當你數據讀完的時候不代表你的數據已經寫完了,因為還有一部分有可能會留在內存這個緩沖區中…

JDK下載地址、SecureCRT中JDK安裝和環境配置、SecureCRT窗口編程、linux下命令運行小程序

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 下載linux版本的JDK。java SE、java EE JDK是通用的, 32位系統選Linux x86, 64位系統選Linux x64&#xff…

HTMLTestRunner 漢化版---來源一個大神的源碼(加了失敗截圖,用例失敗重新執行 功能)...

HTMLTestRunner 漢化版 20170925 測試報告完全漢化,包括錯誤日志的中文處理針對selenium UI測試增加失敗自動截圖功能增加失敗自動重試功能增加餅圖統計同時兼容python2.x 和3.x20180402 表格樣式優化修復部分bug增加截圖組,可展示多張截圖,首…

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder

一.問題描述&#xff1a;pom.xml導入依賴時報錯 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder 二.解決方法&#xff1a; 1.加入ali鏡像源 <repositories><repository><id>maven-ali</id><url>https://mave…

你很棒的---自我管理方法,一生受用!!!

激勵自己--自我暗示 每天寫下五件幸福的事 &#xff1a;&#xff08;例12月2日周日&#xff09;1、給爸媽各買了一件衣服 2、出門曬了一下太陽 3、認識了一個新朋友&#xff0c;去了青年湖公園&#xff0c;人生就是一種經歷&#xff01;4、看了場電影《命運呼叫轉移》悟人生真…