MMORPG網(wǎng)絡(luò)游戲開發(fā)之Protobuf的基本使用

MMO游戲又稱大型多人在線角色扮演類游戲,在所有的角色扮演的游戲當(dāng)中,玩家都要扮演一個(gè)虛擬角色,并控制角色活動
MMO可以分為客戶端和服務(wù)器兩部分,玩家通過客戶端連接到互聯(lián)網(wǎng)登錄服務(wù)器才能進(jìn)行游戲,游戲玩家的數(shù)據(jù)資料保存在服務(wù)器上,游戲的開發(fā)商和運(yùn)營商提供游戲的服務(wù)器以及管理虛擬世界,對游戲不斷的做出更新以便留住老玩家以及吸引新玩家

今天就為大家介紹MMORPG游戲中的Protobuf的基本使用
本篇文章涉及到的源碼及素材資源可以在我們的《從零開發(fā)MMO 3天訓(xùn)練營【第一期】 》視頻末尾掃描二維碼免費(fèi)獲取
安裝Protobuf
首先在VisualStudio里創(chuàng)建一個(gè)Protobuf項(xiàng)目,右擊這個(gè)項(xiàng)目下的依賴項(xiàng)選擇管理NuGet程序包

搜索Protobuf-net,然后選擇第一個(gè)進(jìn)行安裝

Protobuf的使用
Protobuf的使用很其實(shí)簡單,只要在你的類前面加上[ProtoContract],然后在每一個(gè)字段上面加上[ProtoNember]就可以了,如下圖所示

ProtoNember的作用是在序列化協(xié)議數(shù)據(jù)時(shí)為它下方的字段提供一個(gè)編號,也就是上圖中ProtoNember后面括號中的數(shù)字,用來表明字段在序列化后的數(shù)據(jù)中的位置,如果編號是1,那么就表示占據(jù)整個(gè)數(shù)據(jù)包的最前面的位置
舉個(gè)例子:
上圖中的Person類有三個(gè)字段,當(dāng)我們序列化Person數(shù)據(jù)時(shí),Id字段一定是處于序列化最前面的,name字段處于第二位,Address則位于最后
這樣Protobuf在解析數(shù)據(jù)時(shí),它就能知道最先解析的數(shù)據(jù)是什么,為什么Protobuf需要有這樣的編號呢?
如果使用JOSN來序列化數(shù)據(jù)那么它序列化出來的數(shù)據(jù)的格式就如下圖所示

因?yàn)镴SON序列化后的數(shù)據(jù)寫入了字段名,所以它在反序列化時(shí)就可以根據(jù)字段名來獲取這個(gè)字段對應(yīng)的值,然后再反序列化到我們要?jiǎng)?chuàng)建的Person對象里
所謂的序列化就是把一個(gè)Person對象轉(zhuǎn)成字符串,就如上圖所示,反序列化就是把這個(gè)字符串轉(zhuǎn)換成Person對象,JSON在反序列化時(shí)會根據(jù)寫入的字段名獲取對應(yīng)的值,然后將這些數(shù)值填入到新創(chuàng)建的Person對象的id字段,name字段,Address字段中
但是由于Protobuf為了節(jié)省數(shù)據(jù)傳遞的開銷,它不會傳遞這些字段名,所以需要指定編號,這樣Protobuf才能知道第一個(gè)數(shù)據(jù)項(xiàng)解析的數(shù)據(jù)是什么?第二個(gè)數(shù)據(jù)項(xiàng)是什么?第三個(gè)數(shù)據(jù)項(xiàng)解析的又是什么?
以上是關(guān)于Protobuf的基本使用,那么怎樣序列化數(shù)據(jù)呢?就是用下面這段代碼

這段代碼會使用Serializer.Serialize方法將上面創(chuàng)建的Person對象序列化到一個(gè)文件里
Protobuf的反序列化是相反的逆過程,反序列化會調(diào)用Serializer.Deserialize方法把一個(gè)文件的數(shù)據(jù)導(dǎo)入到程序里面

Protobuf的使用很簡單,只要記住Serializer類,和它的序列化、反序列化方法就夠了,一個(gè)類,當(dāng)你寫Protobuf協(xié)議時(shí),就按照這樣的形式去寫就可以了
Protobuf的高級用法
Protobuf是可以跨語言的,也就是說我可以用Protobuf的專用語法去寫網(wǎng)絡(luò)協(xié)議,然后用Protogen生成工具從Protobuf文件里生成C#的代碼
Protobuf的基本使用就到這里就結(jié)束了,感謝各位讀者能夠看到這里,如果想要學(xué)習(xí)如何在項(xiàng)目中使用Protobuf可以參加我們的從零開發(fā)MMORPG 3天訓(xùn)練營,原價(jià)298,現(xiàn)在限時(shí)免費(fèi)領(lǐng)取
從零開發(fā)MMORPG 3天訓(xùn)練營可以在我們的《從零開發(fā)MMO 3天訓(xùn)練營【第一期】 》視頻末尾掃描二維碼免費(fèi)獲取
課程大綱如下




學(xué)完你能夠收獲

連續(xù)3天,360+分鐘
不僅僅能讓你從零開發(fā)MMORPG,更能讓你了解游戲行業(yè)求職所面臨最重要的問題!
讓你在入行前避過這些坑
本篇文章涉及到的源碼及素材資源,還有更多游戲開發(fā)資源,可以在我們的《從零開發(fā)MMO 3天訓(xùn)練營【第一期】 》視頻末尾掃描二維碼獲取