這篇“Unity服務(wù)器下發(fā)配置的方法是什么”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Unity服務(wù)器下發(fā)配置的方法是什么”文章吧。
成都創(chuàng)新互聯(lián)專注于中大型企業(yè)的成都做網(wǎng)站、成都網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上1000家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注品牌網(wǎng)站制作和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
1 Sproto協(xié)議
在之前的客戶端技術(shù)選型的文章里我們就介紹過,服務(wù)器使用的是SkyNet。
Sproto 是谷歌Proto的一個變種,是云風(fēng)基于SkyNet實(shí)現(xiàn)的一種優(yōu)化格式。之所以選擇這個格式是因?yàn)镾kyNet對Proto的支持只到2.x,并且已經(jīng)不再維護(hù)了。而Sproto更符合目前服務(wù)器在Lua端的性能表現(xiàn)。為了配合服務(wù)器的通信協(xié)議格式,客戶端也選擇使用Sproto。
詳細(xì)的內(nèi)容以及擴(kuò)展閱讀可以參照技術(shù)選型文章里的Sproto部分。
2 Sproto 表格
客戶端關(guān)注兩個部分的數(shù)據(jù),一部分來自運(yùn)行時服務(wù)器的下發(fā),一部分來自靜態(tài)的策劃配置。既然和服務(wù)器通信采用的是Sproto格式,那就沒理由再整一套額外的數(shù)據(jù)格式來處理策劃數(shù)據(jù)。
但,策劃大部分時候都是用Excel編輯數(shù)據(jù),所以我們需要制作一個導(dǎo)表工具,用來將表格數(shù)據(jù)轉(zhuǎn)化為以Sproto格式序列化的Byte文件,就像Proto一樣。
這里的轉(zhuǎn)換過程有點(diǎn)復(fù)雜,一言難盡,有空我們講導(dǎo)表工具的時候再進(jìn)行詳細(xì)闡述??偠灾褪强蛻舳藢⒎?wù)器的通信協(xié)議和策劃的表格配置統(tǒng)一成了Sproto格式讀取和處理。這帶來了很多好處,比如要聯(lián)調(diào)服務(wù)器數(shù)據(jù)的時候,我們完全可以使用表格偽造數(shù)據(jù)進(jìn)行聯(lián)調(diào),或者將服務(wù)器下發(fā)的數(shù)據(jù)持久化存儲,變?yōu)殪o態(tài)數(shù)據(jù)的一部分。同時這樣也可以讓策劃把一部分敏感數(shù)據(jù)配置在服務(wù)器,登陸之后再由服務(wù)器下發(fā)存儲到安全的地方,防止反編譯。
當(dāng)然這些特性其實(shí)我們都沒有做,只是用到了服務(wù)器數(shù)據(jù)格式和策劃數(shù)據(jù)格式一致的特性,進(jìn)行了部分表格的增改。當(dāng)然這里就包括對多語言的更改。
3 增改結(jié)構(gòu)
客戶端對于不同的數(shù)據(jù)源也是分開存儲的,策劃數(shù)據(jù)匯總于DataManager,而服務(wù)器數(shù)據(jù)匯總于NetDataManager。二者之間基本不會有交互,只有一種情況下除外。服務(wù)器在下發(fā)了登陸成功協(xié)議之后,緊跟著會下發(fā)策劃數(shù)據(jù)表的熱更新Bytes。
這里需要和傳統(tǒng)的客戶端資源熱更新形成區(qū)別??蛻舳说臒岣率庆o態(tài)的,走的是cdn,它是一種常規(guī)的管線功能,更新的資源體量大,種類多。但是只會在游戲登陸之前(一般是剛啟動)。而我們這種功能實(shí)現(xiàn)是為了應(yīng)急或者修補(bǔ)BUG而應(yīng)用的備份策略。服務(wù)器的流量本來就很貴,不應(yīng)該用來下發(fā)大量的靜態(tài)/表格數(shù)據(jù)。同時作為應(yīng)急功能,它不能被過渡使用從而導(dǎo)致過多過于復(fù)雜的邏輯。
我們會在一個專門的導(dǎo)表目錄里放置需要熱更的表格數(shù)據(jù),導(dǎo)出之后,服務(wù)器會識別到該目錄下的所有文件,根據(jù)文件名建立名字-數(shù)據(jù)索引,然后存儲在內(nèi)存中,客戶端連接上之后,以專門的協(xié)議下發(fā),客戶端收到之后,和緩存中的數(shù)據(jù)進(jìn)行比較,沒有的增補(bǔ),已有的覆蓋。
這個功能對于服務(wù)器來說是熱重載的,對于那些已經(jīng)在線的客戶端,也可以通過運(yùn)營工具進(jìn)行廣播,從而完成服務(wù)器不停機(jī),客戶端不重啟,便對數(shù)據(jù)或者BUG進(jìn)行修復(fù)。
4 屏蔽詞實(shí)現(xiàn)
屏蔽詞有些麻煩。為了兼顧查找和替換效率,我們是使用了 trie Tree的方式進(jìn)行的。如果有不清楚的,可以返回看這篇文章。
因?yàn)槠帘卧~的條目非常之多(我們過審的版本有52萬條,文本文件就接近10M),所以必須提前將屏蔽詞進(jìn)行離線處理,然后運(yùn)行時進(jìn)行加載(不然每次登陸你可能要等10幾秒)。但這也帶來了額外的問題,因?yàn)樗幌衿渌砀駭?shù)據(jù)一樣是離散的,所以不能使用上述方法進(jìn)行增量下發(fā)。
而由于屏蔽詞的樹是提前遍歷所有詞組,然后離線生成的,它也不具備動態(tài)插入功能(重新生成整棵樹代價很大)。所以針對屏蔽詞我們使用了另一套規(guī)則。既然不能合在一起,干脆就完全獨(dú)立為兩棵樹。數(shù)據(jù)格式是一樣的,只是數(shù)據(jù)源不一樣,那么我們就創(chuàng)建兩個版本,Server版本和Client版本。Client版本多且大,離線生成。服務(wù)器版本小且動態(tài)生成。當(dāng)需要查詢屏蔽詞的時候,優(yōu)先查詢服務(wù)器版本,沒有再查Client。
而這個時候,數(shù)據(jù)下發(fā)依然可以通過上述的框架結(jié)構(gòu)進(jìn)行數(shù)據(jù)增補(bǔ),每次服務(wù)器有屏蔽詞下發(fā),就重建一次服務(wù)器屏蔽詞樹,因?yàn)榉?wù)器增補(bǔ)的條目數(shù)一般都很少,幾乎不會造成性能問題(即使有也是一瞬間)。
我們在版署過審中,使用該方案減少了多次打回出包的問題。
5 復(fù)合配置熱修復(fù)
所謂復(fù)合配置就是有些問題單張數(shù)據(jù)表無法修復(fù)的。比如系統(tǒng)郵件,如果本身郵件的數(shù)據(jù)表就缺少數(shù)據(jù)模板,這個時候我們不僅僅要下發(fā)語言相關(guān)的內(nèi)容,還需要下發(fā)郵件的增補(bǔ)數(shù)據(jù)。同理如果郵件還涉及到新的獎勵物品,也可以通過下發(fā)Item表進(jìn)行增補(bǔ)。當(dāng)然這些使用到的都是基于上述的增補(bǔ)框架。
6 運(yùn)營介入
這部分涉及到的是運(yùn)營的各種公告和通知。比如緊急停機(jī),突發(fā)狀況等等,這些都是無法預(yù)料的,自然也無法事先將語言或者數(shù)據(jù)配置在表格中。而上述我們所處理的都是游戲功能,屬于策劃層面的BUG修復(fù)。但是到運(yùn)營這個層面就不同了,首選運(yùn)營編輯公告或者處理不同地區(qū)服務(wù)器的時候不應(yīng)該都經(jīng)過策劃或者開發(fā)組。事實(shí)上游戲運(yùn)營者可能和開發(fā)者完全是不同的公司。如果是在不同的國家的當(dāng)?shù)匕l(fā)行,甚至語言都不通。
這個時候就需要一套完整的工具鏈來幫助運(yùn)營直接使用該功能。前面我們聊了這么多也知道,服務(wù)器和客戶端之間進(jìn)行數(shù)據(jù)增補(bǔ)是完全沒有問題的,現(xiàn)在需要在這條鏈路里增加一個控制方。確切的說應(yīng)該是變更一個控制方。因?yàn)楝F(xiàn)有的鏈路服務(wù)器和客戶端交互是在某個特殊的目錄下,存有特殊的byte文件。而這個文件是策劃導(dǎo)表生成的。服務(wù)器讀取文件,轉(zhuǎn)化為二進(jìn)制,通過協(xié)議下發(fā)。
而我們稍微轉(zhuǎn)變一下思路,即提供一個運(yùn)營工具,讓他們可以將需要的配置通過工具生成一個指定的文件或者二進(jìn)制緩存,傳遞到服務(wù)器,然后就可以按照正常流程進(jìn)行數(shù)據(jù)增補(bǔ)了。
以上就是關(guān)于“Unity服務(wù)器下發(fā)配置的方法是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。