🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

為什麼遊戲公司現在都喜歡用protobuf?

點擊上方億元程序員+關注和★星標

image

引言

哈囉大家好,不知道小夥伴們最近有沒有發現一個現象,無論是大廠還是小團隊,越來越多的遊戲項目都在使用protobuf作為數據交換格式。

筆者想起,在去年有幸研學過某個砍樹遊戲(尋道大千)源碼的時候,發現他們用的也是protobuf

曾經流行JSON、XML似乎在遊戲開發領域悄然退居二線,這到底是為什麼?

今天我們就來聊聊protobuf為何能成為遊戲行業的“新寵”。

什麼是protobuf?

先簡單科普一下

Protocol BuffersGoogle開發的一種輕量級、高效的數據交換格式。

它能夠將結構化數據序列化,適用於網絡傳輸和數據存儲。

與JSON和XML相比protobuf生成的二進制數據更小,解析速度更快。

遊戲公司為何鐘情於protobuf?

1.性能優勢

遊戲對性能的要求極為苛刻,尤其是網絡遊戲。

每毫秒的延遲都可能影響玩家的遊戲體驗。

Protobuf的二進制格式使得數據包體積比JSON3-10倍,序列化和反序列化速度比JSON5-100倍。

image

說到這裡有個小技巧:小夥伴們可以先用JSON,然後領導要優化的時候,再改成Protobuf,實現質的飛躍,建議大家不要學

2.跨平台跨語言

Protobuf支持多種編程語言(C++、C#、Java,JavaScript,TypeScript等),只需定義一次數據結構,即可在各個平台上使用。

筆者覺得這也是Protobuf生態好的原因之一。

3.向前向後兼容

Protobuf通過字段編號而非字段名來標識數據。

新增字段不會破壞舊版程序,老版本可以忽略新字段繼續運行,這為需要頻繁更新的遊戲以及多變的遊戲修改需求提供了便利。

一起來看個例子

既然Protobuf有這麼多優點,深受眾多公司青睞,那麼我們一起來看看它在Cocos遊戲開發中的實際表現。

1.搭建場景

首先簡單搭建一下場景,分為三部分。

  • 1.信息展示:包括頭像和暱稱。
  • 2.登錄按鈕:點擊向伺服器獲取頭像和暱稱。
  • 3.Loading效果:單純為了讓例子更好看。

image

2.搭建伺服器

找AI搭子幫忙簡單搭建一個簡單的Http伺服器。

image

代碼比較簡單,生成如下:

image

3.協議用JSON

用JSON比較容易上手,現在很多語言都自帶JSON的編碼和解析。

客戶端

首先定義一下發送的結構,包括帳號和密碼,返回的消息包括是否成功、消息和用戶信息。

image

然後請求伺服器,JSON編碼採用JSON.stringify(requestData),解碼採用response.json()

image

添加點擊事件,加個Loading效果。(這裡也有個小技巧,我們先假裝Loading等待2秒,留一點優化空間,等領導反饋卡的時候再快點,十分好用,也建議大家不要學)

image

伺服器

伺服器做一下簡單的處理,解碼採用JSON.parse(buffer.toString()),編碼採用JSON.stringify(loginResponse)

image

啟動伺服器

image

效果演示

image

4.協議用Protobuf

用Protobuf需要先定義好協議文件,我們簡單定義一下登錄協議、登錄響應和登錄成功的用戶數據。

image

與此同時,需要通過npm install -g pbjs安裝一下生成工具。

image

客戶端

首先通過pbjs ./proto/login.proto --ts ./assets/scripts/proto/login.ts生成一下ts代碼。

image

與JSON類似,通過生成的編碼接口encodeLoginRequest(loginRequest)和解碼接口decodeLoginResponse(response),對數據進行編碼和解析。

image

最後是發送。

image

伺服器

首先通過pbjs ./proto/login.proto --es6 ./server/proto/login.js生成一下js代碼。

image

伺服器也是通過生成的解碼接口proto.decodeLoginRequest(buffer)和編碼接口proto.encodeLoginResponse(loginResponse)進行解碼和編碼。

image

效果演示

image

並非萬能鑰匙

根據上面的例子來看protobuf並非在所有場景下都是最佳選擇。

對於簡單的示例或者小項目,引入protobuf需要安裝環境、生成代碼,反而增加了不必要的複雜度。

結語

遊戲公司的項目一般都有一定規模,並且是團隊開發,protobuf憑藉其出色的性能,確實成為了遊戲公司的優選方案。

但是筆者認為,不管誰強誰弱,只有真正適合自己的,才是最好的。

你們覺得呢?

本文源工程可通過私信發送 protobuf 獲取。

我是"億元程序員",一位有著8年遊戲行業經驗的主程。在遊戲開發中,希望能給到您幫助, 也希望透過您能幫助到大家。

AD:筆者線上的小游戏《打螺絲闖關》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行點擊搜索體驗。

實不相瞞,想要個愛心!請把該文章分享給你覺得有需要的其他小夥伴。謝謝!

推薦專欄:

知識付費專欄

你知道和不知道的微信小游戏常用API整理,趕緊收藏用起來~

100個Cocos實例

8年主程手把手打造Cocos獨立遊戲開發框架

和8年遊戲主程一起學習設計模式

從零開始開發贪吃蛇小游戏到上線系列

點擊下方灰色按鈕+關注。


原文出處:https://juejin.cn/post/7566103962497794086


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝25   💬5   ❤️7
780
🥈
我愛JS
📝2   💬7   ❤️3
118
🥉
酷豪
1
#5
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付