前端使用google-protobuf传输数据

google-protobuf

理解

protoBuf(下面简称PB)全称Protocol Buffers,由Google公司开发出来且其内部广泛使用,对比其它的编解码框架,有如下几个优点:

  1. 跨语言支持,如Java、C++、Python、js等
  2. 编码后消息更小,因此,更有利于网络传输和本地存储,当然,性能也很强大
  3. 不同版本协议的数据结构前向兼容

以我个人站在前端的角度去看,pb虽然在一定程度上增加了前端的工作量,但是它可以更好增加数据的私密性,而且编码后数据变得更小。

安装与使用

这里主要使用pb进行数据的序列化和反序列化,在此之前需要后端生成一份 .proto的文件给到前端。
这里从网上拿了一份.proto作例子

syntax = "proto3";
package http;

/**
 * 聊天类型
 */
//----------枚举--------------------///
enum ChatType {
    CHAT_TYPE_UNKNOW = 0;//未知
    CHAT_TYPE_PUBLIC = 1;//公聊
    CHAT_TYPE_PRIVATE = 2;//私聊
}
/**
 * 聊天请求
 */
message ChatReqBody {
    int64 time = 1;//消息发送时间
    ChatType type = 2; //聊天类型
    string text = 3; //聊天内容
    string group = 4; //目标组id
    int32 toId = 5; //目标用户id,
    string toNick = 6; //目标用户nick
}

/**
 * 聊天响应
 */
//----------通用message--------------------///
message ChatRespBody {
    int64 time = 1;//消息发送时间
    ChatType type = 2; //聊天类型
    string text = 3; //聊天内容
    int32 fromId = 4; //发送聊天消息的用户id
    string fromNick = 5; //发送聊天消息的用户nick
    int32 toId = 6; //目标用户id
    string toNick = 7; //目标用户nick
    string group = 8; //目标组id
    Tests test = 9
}

message  Tests {
    string aa = 1; 
    string bb = 2; 
}

package http为包名编译后文件**_pb的命名
下一步需要用包管理工具(npm或者yarn)安装google-protobuf

npm install google-protobuf

然后使用下面指令把.proto转换为js

如果要使用闭包导入运行如下命令:

protoc --js_out=library=myproto_libs,binary:. src/proto/***.proto

如果要使用CommonJS导入,则生成应运行如下命令:

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

src/proto/***.proto为需要转换的proto文件
可用空格 输入多个proto文件

执行完成后会在同目录下输出其对应的***_pb.js的文件
在你需要序列化或反序列化的js中引入该文件进行操作即可

import proto from '../proto/imweb_pb'

var chatRespBody= new proto.ChatRespBody()
//数据写入
chatRespBody.setTime('abcdefg')
chatRespBody.setFromnick('小明') 
//枚举型的数据写入
const chatTypeList = ['CHAT_TYPE_UNKNOW', 'CHAT_TYPE_PUBLIC', 'CHAT_TYPE_PRIVATE']
chatRespBody.setType(proto.ChatType[chatTypeList[0]]) //ChatType为定义好的枚举类型
//当你要写入的数据写入完成后直接把chatRespBody return即可

//数据读取 这里会有两种方法 当你数据模型比较简单的时候可以用第一种
// content为proto编译后的数据 现在需要把该数据进行反编译
let data = proto.ChatRespBody.deserializeBinary(content)
// 第一种:   
//获取某个参数 
let text = data.getText()
//若message结构体内还有message的参数,那么需要像下面那样获取
let text = data.getTests().getAa()
// 也可以用第二种方法直接获取到他整个的数据结构
const dataJson = proto.ChatRespBody.toObject(false, data)

注意:set、get的方法不管proto文件内命名的参数是否驼峰都只需开头大写后面全小写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用以下命令安装 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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值