点击上方亿元程序员+关注和★星标

引言
哈喽大家好 ,不知道小伙伴们最近有没有发现一个现象,无论是大厂还是小团队,越来越多的游戏项目都在使用protobuf作为数据交换格式。
笔者想起 ,在去年有幸研学过某个砍树游戏(寻道大千)源码的时候,发现他们用的也是protobuf。
曾经流行 的JSON、XML似乎在游戏开发领域悄然退居二线,这到底是为什么?
今天 我们就来聊聊protobuf为何能成为游戏行业的"新宠"。
什么是protobuf?
先简单科普一下
Protocol Buffers 是
它能够将结构化数据序列化,适用于网络传输和数据存储。
与JSON和XML相比 ,
protobuf生成的二进制数据更小,解析速度更快。
游戏公司为何钟情于protobuf?
1.性能优势
游戏对性能的要求极为苛刻,尤其是网络游戏。
每毫秒的延迟都可能影响玩家的游戏体验。
Protobuf 的二进制格式使得数据包体积比JSON小3-10 倍,序列化和反序列化速度比JSON快5-100倍。

**说到这里有个小技巧:**小伙伴们可以先用JSON,然后领导要优化的时候,再改成Protobuf,实现质的飞跃,建议大家不要学。
2.跨平台跨语言
Protobuf 支持多种编程语言(C++、C#、Java,JavaScript,TypeScript等),只需定义一次数据结构,即可在各个平台上使用。
笔者觉得 这也是Protobuf生态好的原因之一。
3.向前向后兼容
Protobuf通过字段编号而非字段名来标识数据。
新增字段不会破坏旧版程序,老版本可以忽略新字段继续运行,这为需要频繁更新的游戏以及多变的游戏修改需求提供了便利。
一起来看个例子
既然 Protobuf有这么多优点,深受众多公司青睐,那么我们一起来看看它在Cocos游戏开发中的实际表现。
1.搭建场景
首先简单搭建一下场景,分为三部分。
- 1.信息展示:包括头像和昵称。
- 2.登陆按钮:点击向服务器获取头像和昵称。
- 3.Loading效果:单纯为了让例子更好看。

2.搭建服务器
找AI搭子 帮忙简单搭建一个简单的Http服务器。

代码比较简单,生成如下:

3.协议用JSON
用JSON 比较容易上手,现在很多语言都自带JSON的编码和解析。
客户端
首先定义一下发送的结构,包括账号和密码,返回的消息包括是否成功、消息和用户信息。

然后 请求服务器,JSON编码采用JSON.stringify(requestData),解码采用response.json()。

添加 点击事件,加个Loading效果。(这里也有个小技巧,我们先假装Loading等待2秒,留一点优化空间,等领导反馈卡的时候再快点,十分好用,也建议大家不要学)

服务端
服务端 做一下简单的处理,解码采用JSON.parse(buffer.toString()),编码采用JSON.stringify(loginResponse)。

启动服务器

效果演示

4.协议用Protobuf
用Protobuf需要先定义好协议文件,我们简单定义一下登录协议、登陆响应和登陆成功的用户数据。

与此同时 ,需要通过npm install -g pbjs安装一下生成工具。

客户端
首先 通过pbjs ./proto/login.proto --ts ./assets/scripts/proto/login.ts生成一下ts代码。

与JSON类似 ,通过生成的编码接口encodeLoginRequest(loginRequest)和解码接口decodeLoginResponse(response),对数据进行编码和解析。

最后是发送。

服务端
首先 通过pbjs ./proto/login.proto --es6 ./server/proto/login.js生成一下js代码。

服务端 也是通过生成的解码接口proto.decodeLoginRequest(buffer)和编码接口proto.encodeLoginResponse(loginResponse)进行解码和编码。

效果演示

并非万能钥匙
根据上面的例子来看 ,protobuf并非在所有场景下都是最佳选择。
对于 简单的示例或者小项目,引入protobuf需要安装环境、生成代码,反而增加了不必要的复杂度。
结语
游戏公司的项目 一般都有一定规模,并且是团队开发,protobuf凭借其出色的性能,确实成为了游戏公司的优选方案。
但是笔者认为,不管谁强谁弱,只有真正适合自己的,才是最好的。
你们觉得呢?
本文源工程 可通过私信 发送 protobuf 获取。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
点击下方灰色按钮+关注。