Hey,你們好!我是 Bill 「LtRandolph」 Clark,一名英雄聯盟的遊戲工程師。許多 Rioter 工程師關注大量的內容須要直接發送給玩家問題——這是兩個我最近最喜歡的例子之一,包括最新的冠軍Jhin及項目重構的支持。而個人團隊使得這個過程變得又快有簡單。php
咱們有一個簡單的目標:即容許參加遊戲試玩項目的暴民,可以建立兩倍於任何給定的LoL(英雄聯盟)補丁的內容。這提及來容易,可是執行起來倒是一個充滿挑戰的任務。程序員
今天,咱們討論實現這一目標咱們所鋪設的基礎:Riot 遊戲數據服務器(GDS)。雖然這是一篇技術文章,可是我會站在一個較高的層次來解釋這個問題。若是你是一個在作多系統間傳送數據工做的工程師,我但願這能讓你特別感興趣。安全
遊戲數據:
首先,咱們瞭解一些背景。在LoL的工做中,存在兩種類型的遊戲數據:一種是 key-value 對,被稱爲屬性數據(如 Black Cleaver HP 獎金是300),另外一種是不透明的二進制數據(如,大文本、動畫和視頻)。在這篇文章中,咱們只討論屬性數據,二進制數據處理是將來潛在的一篇博文。服務器
在LoL的全部歷史中,屬性數據由一堆鬆散、混亂的文件組成,這些文件存儲在一個大的名爲 DATA 的文件夾中。動畫
早期,咱們將數據存儲在.ini的文件中(對,就是 Windows 下 .ini的文件格式)。相似以下所示:spa
沒有漂亮的界面設計
固然,我建立這個例子是爲了強調一些咱們在編輯.ini文件時遇到的一些共同的問題。這離用戶友的界面相差甚遠。編輯原始文本時很是容易混亂——缺少重要的內容,而其餘字段又重複。設計者們天天不得不處理這種混亂,這裏總共有 977 種法術,這些功能(固然忽略)位於「MissileEffect=AnnieBasicAttack_mis.troy」行中,在很早的LoL開發中,每一個冠軍涉及一個使人愉快的場景:「Death=Cardmaster_Death.wav。」視頻
下面是當前數據系統面臨的一些關鍵問題:blog
一、使用 Notepad++ 來編輯屬性數據
二、對已存在的字段沒有清晰的定義
三、缺少類型安全
四、多人同時編輯同一個文件時會有合併衝突問題遊戲
………………………………
轉自:解放號IT衆包微刊