网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > 游戏开发 >

H5游戏性能优化系列-----协议相关优化

时间:2025-09-12 18:21

人气:

作者:admin

标签:

导读:H5通讯协议这一块儿最长将的搭配应该是WebSocketProtobuf这种模式吧,本篇就聊一下protobuf相关的优化。 Protobuf基本流程 导入protobuf库 一般是后端定义协议文件,xxx.proto 现在的引擎都是要求...

H5通讯协议这一块儿最长将的搭配应该是WebSocket+Protobuf这种模式吧,本篇就聊一下protobuf相关的优化。

Protobuf基本流程

  1. 导入protobuf库
  2. 一般是后端定义协议文件,xxx.proto
  3. 现在的引擎都是要求写Ts文件的,所以要生成协议类的.d.ts,这样写协议处理时才有代码提示
  4. 直接加载proto文件,然后用protobuf库动态生成消息类在内存中, 或者直接用pbjs等命令生成协议类的js代码

 

Protobuf的一些问题

在一些小游戏平台,比如微信小游戏平台,protobuf是不能直接加载proto文件然后动态生成协议类的,必须要将proto文件生成出对应的协议类js文件,这在proto协议比较少的时候,问题不是很明显,如果有成千上万个协议消息,生成的js会很大,进游戏的时候就必须要多加载这部分的js代码。

解决方法有以下几点:

  1. 协议定义的复用,比如各种消耗, costType, costNum, 可以定义成公用的,在其他协议类需要用到时直接引用这个公用的类型。
  2. pb生成的协议类js中,我们通过参数控制,只生成必要的函数即可。比如一个消息类,明确知道只会出现在前端发送给后端的过程中,那么生成这个协议的类中,只需要出现encode编码函数即可,因为前端不需要解码,同样对于明确知道是服务器返回的协议类型,只需要出现decode函数即可,不需要encode函数。
  3. 为什么在小游戏平台用不了动态加载proto这种形式,最终原因是protobuf的库中使用了eval或者new Function这种小游戏平台不支持的方式,花点时间魔改protobuf库,将用string生成函数的相关代码改成直接返回对应函数,截取一部分修改示意:

image

   4. 如果觉得改protobuf的js库麻烦又怕改了之后出bug,但是又不想生成协议类的硬代码,可以选择不用protobuf,  选择其他同时兼容web和微信小游戏的协议框架, 或者直接使用json结构,加上msgpack或者zlib压缩成二进制?

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
  • 便捷打包Instant Asset脚本

    便捷打包Instant Asset脚本

    使用说明 将脚本放在Assets/Editor目录下 在需要打包同一个table的资源要放在同一...
  • Tuanjie InstantAsset

    Tuanjie InstantAsset

    InstantAsset InstantAsset 是一套全新的资产解决方案,旨在提升开发者的开发和运行...
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信