注册
web

为什么游戏公司现在都喜欢用protobuf?

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



引言


哈喽大家好,不知道小伙伴们最近有没有发现一个现象,无论是大厂还是小团队,越来越多的游戏项目都在使用protobuf作为数据交换格式。


笔者想起,在去年有幸研学过某个砍树游戏(寻道大千)源码的时候,发现他们用的也是protobuf


曾经流行JSON、XML似乎在游戏开发领域悄然退居二线,这到底是为什么?


今天我们就来聊聊protobuf为何能成为游戏行业的“新宠”。


什么是protobuf?


先简单科普一下



Protocol BuffersGoogle开发的一种轻量级、高效的数据交换格式。


它能够将结构化数据序列化,适用于网络传输和数据存储。


与JSON和XML相比protobuf生成的二进制数据更小,解析速度更快。



游戏公司为何钟情于protobuf?


1.性能优势


游戏对性能的要求极为苛刻,尤其是网络游戏。


每毫秒的延迟都可能影响玩家的游戏体验。


Protobuf的二进制格式使得数据包体积比JSON3-10倍,序列化和反序列化速度比JSON5-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:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。


实不相瞒,想要个爱心!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!


推荐专栏:


知识付费专栏


你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~


100个Cocos实例


8年主程手把手打造Cocos独立游戏开发框架


和8年游戏主程一起学习设计模式


从零开始开发贪吃蛇小游戏到上线系列


点击下方灰色按钮+关注。


作者:亿元程序员
来源:juejin.cn/post/7566103962497794086

0 个评论

要回复文章请先登录注册