快应用接入 google-protobuf 详解

前言

最近在使用快应用做IM相关开发,与后端使用时遇到了使用 protobuf 的问题,顺便介绍下Protobuf 之快应用接入教程和踩过的坑。

问题

**主要有2点: **

  1. 前端常用的protobufjs集成进快应用时会遇到XMLHTTPRequest undefined的问题,由于快应用并不是webview的运行环境导致
  2. 用pbjs 0.0.14 直接生成的js文件会存在枚举类型&嵌套对象无法序列化&反序列化的问题

接入教程

我们主要会使用到一下几个工具:

protoc : 根据协议文件生成指定语言的protobuf代码
CommonJS : js模块化规范
npm : Nodejs包管理工具
browserify : CommonJS格式转换工具

下载 protoc

github 链接:https://github.com/google/protobuf/releases
或者使用:brew install protoc方式安装

安装npm相关包

npm install -g browserify
npm install google-protobuf

编写 proto 协议文件

im.proto

syntax = "proto3";

// 消息类型
message Message {
    string uid = 1; // 设备id
    string clientVersion = 2; // 客户端版本
    string deviceId = 3; // 设备唯一标识
    string deviceModel = 4; // 设备型号 (iPhone8/Mac OS X 10_6_8/Windows NT 6.1)
}

生成文件

一、生成 im_pb.js

protoc --js_out=import_style=commonjs,binary:. ./im.proto

二、声明导出文件

var proto = require("./im_pb");

module.exports = {
    proto: proto
};

三、导出最终文件

browserify exports.js > improtobuf.js

接入快应用

 import improtobuf from './improtobuf'

let msg = new proto.Message()
sauthMsg.setUid(data.uid)
sauthMsg.setClientversion(data.clientVersion)
sauthMsg.setDeviceid(data.deviceId)
console.log("proto bytes: " + msg.serializeBinary());

var message2 = proto.Message.deserializeBinary(msg.serializeBinary()).toObject();
console.log("bytes: pbpbpbpbpbpbpbpb" + message2);
你可以使用以下命令安装 google-protobuf: npm install --save google-protobuf 这个命令会将 google-protobuf 模块安装到你的项目中,并将其保存为依赖项。 然后,你可以使用以下路径引入 empty_pb.js 模块: google-protobuf/google/protobuf/empty_pb.js 这将允许你在代码中使用 empty_pb.js 模块。请确保在你的代码中正确引入这个路径。 需要注意的是,确保你已经在安装 google-protobuf 之前完成了 protobufjs 的安装,以便确保这两个模块之间的依赖关系正确。如果你遇到了安装问题或错误提示,你可以使用 --force 选项来强制执行安装命令,以解决已存在的文件问题。 希望这些信息对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [protobuf.js的使用](https://blog.csdn.net/qq_27868061/article/details/114038738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [npm install -g protobufjs](https://blog.csdn.net/qifenzhisanjin/article/details/124952503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值