文档章节

Protobuf在微信小游戏开发中的使用技巧

白鹭科技
 白鹭科技
发布于 2018/01/24 11:07
字数 1049
阅读 756
收藏 9

微信小游戏发布后,许多 HTML5 游戏开发者希望把现有的 HTML5 游戏迁移到微信小游戏中,但由于一些技术上的问题导致进程卡壳。通过梳理Egret社区、白鹭小游戏开发技术讨论群等途径的反馈后发现,有不少开发者遇到的难题在于「如何在微信小游戏中使用Protobuf 」。

白鹭引擎架构师王泽在近期发布了一个开源项目protobuf-egret,提供了一个可以适配微信小游戏的Protobuf 类库以及对应的代码生成工具,并且这个工具不仅限于白鹭引擎,即使是使用其他 HTML5 游戏引擎的开发者也可以使用。

项目地址:

https://github.com/WanderWang/protobuf-egret/

开源项目 protobuf-egret主要包含了特性、原理、如何安装与使用、如何运行DEMO以及部分已知问题等内容,希望通过本篇内容能够更好的帮助大家开展微信小游戏工作。

特性

1.提供 protobuf.js 基础运行时库

2.提供命令行脚本,将 protofile 生成 JavaScript 代码

3.生成正确的 .d.ts 代码,以方便 TypeScript 项目使用

4.一键配置白鹭引擎的配置文件,无需开发者手动修改配置即可在项目中直接集成

5.本项目虽然名为 protobuf-egret,但是理论上支持所有 HTML5 游戏引擎。欢迎使用 PIXI.js , Cocos2d-js , LayaAir 等其他引擎的开发者使用本库。

原理

Protobuf 是由 Google 设计的序列化数据通信协议。它的基本原理是,通过一个 proto 文件,生成对应平台的代码,并在这部分代码中包含了将对象进行二进制序列化以及对应反序列化的逻辑,研发的前后端如果统一使用同一份Protobuf协议定义接口,就可以统一接口,提升开发效率,并通过Protobuf提供的高效率压缩机制节省通讯流量开销。

protobufjs 是 Protobuf 在 JavaScript 中的实现,它包含了一个用于生成代码的命令行工具以及一个运行时库。在一个标准 Web 应用或者 NodeJS 应用中,使用 protobufjs 就已经可以解决绝大部分问题。但是在白鹭引擎以及微信小游戏中,存在着两个问题,使得 protobufjs 的使用存在一些困难:

1.protobufjs 提供了多种使用方式,但是由于微信小游戏禁止 eval , new Function 等动态代码形式,所以无法使用 protobuf.load('awesome.proto') 这样的方式,必须使用代码生成机制。

2.虽然protobufjs 自身存在着 pbts 命令可以生成 .d.ts 文件,但是在全局模式而非 ES6 module 的情况下存在一些错误。

本项目致力于解决这两个问题,封装了 protobufjs 库及命令行,提供了更简洁的调用方式:

1.在运行时库上使用 protobufjs 6.8.4 的运行时库。由于微信小游戏禁止 eval , new Function 等动态代码形式,所以本项目只提供了生成代码的形式,不支持通过 protobuf.load('awesome.proto') 的方式。

2.修改了生成的 JavaScript 与 .d.ts 文件,以保证可以顺利的在白鹭引擎及微信小游戏上运行。

3.提供了两个命令 pb-egret add 与 pb-egret generate用于搭建Protobuf 环境和生成代码。

如何安装与使用

如何运行 Demo

下载源代码,使用 egret run egret-project即可直接运行Demo项目

已知问题

proto 文件中的每一个协议一定要从属于一个 package,否则.d.ts生成会出现错误导致 ts 文件无法正确的找到这些类。

目前,已经有多个产品均使用这个类库成功的将游戏发布到微信小游戏中,欢迎各位开发者使用。如您有关于微信小游戏的问题咨询或建议,请到Egret 社区、白鹭小游戏研发技术讨论微信群参与讨论,官方技术人员将为你一一解答。

© 著作权归作者所有

白鹭科技
粉丝 11
博文 18
码字总数 29793
作品 0
私信 提问
php安装 protobuf2.6.1扩展

首次实际项目中用到protobuf,找了下资料,弄了下环境并跑通,做下记录以免忘记 由于对接方使用的是proto2.4版本,所以也只能使用版本2的了。注意下,大版本间似乎是不支持的,我们试过安装版...

goodman_fz
2018/12/26
380
0
我的Protobuf消息设计原则(续)--实践

1.首先为 聊天服务器(Chat)定义google protobuf的协议接口文件 接口主要遵循 Request、Response、Notification(Indication),Command(本文未出现)四大消息分类,并且使用Message顶层消...

newzai
2014/07/19
10K
19
Google protobuf与Socket通信数据流

Google protobuf与Socket通信数据流,IM通信数据流; 1. protobuf的使用与集成,protobuf生成Java Proto文件? 2. android使用wire方式生成protobuf的Java文件? Protobuf Plugin for Gradle...

desaco
01/31
0
0
protobuf,json,xml,binary,Thrift之间的对比

golang 使用 protobuf 的教程 golang使用protobuf 一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明...

mickelfeng
2018/11/19
365
0
网易开源游戏服务器框架 pomelo 0.9 版发布

pomelo 0.9版于2月26日发布,以下是该版本的新特性。 ## pomelo rpc支持zeromq通信 在pomelo 0.9中提供了基于zmq的rpc调用,开发者可以根据需要选择原有的pomelo-rpc或者pomelo-rpc-zeromq。...

谢骋超
2014/02/27
8.1K
5

没有更多内容

加载失败,请刷新页面

加载更多

Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
26分钟前
2
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
6
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
1
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.8K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部