protobuf.js是一款直接解析proto文件实现Protocol Buffers通讯的插件
protobuf.js是一个纯 JavaScript 实现,对node.js和浏览器的TypeScript 都支持。它易于使用,速度极快,开箱即用,无需本地编译proto文件,它是在线实时编译解析proto文件实现消息通讯。
Protocol Buffers是一种语言中立、平台中立、可扩展的序列化结构化数据的方式,用于通信协议、数据存储等,最初由 Google 设计,传输高效。
安装
nodejs运行:
npm install protobufjs [--save --save-prefix=~]
var protobuf = require("protobufjs");
命令行实用程序位于 protobufjs-cli 包中,必须单独安装:
npm install protobufjs-cli [--save --save-prefix=~]
浏览器运行:
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/protobuf.7.2.3.js"></script>
使用方式:
使用 .proto 文件
可以使用完整的库加载现有的 .proto 文件,该库解析并编译定义以准备使用(基于反射的)消息类:
// awesome.proto
package awesomepackage; syntax = "proto3"; message AwesomeMessage { string awesome_field = 1; // becomes awesomeField }js
protobuf.load("awesome.proto", function(err, root) { if (err) throw err; // Obtain a message type var AwesomeMessage = root.lookupType("awesomepackage.AwesomeMessage"); // Exemplary payload var payload = { awesomeField: "AwesomeString" }; // Verify the payload if necessary (i.e. when possibly incomplete or invalid) var errMsg = AwesomeMessage.verify(payload); if (errMsg) throw Error(errMsg); // Create a new message var message = AwesomeMessage.create(payload); // or use .fromObject if conversion is necessary // Encode a message to an Uint8Array (browser) or Buffer (node) var buffer = AwesomeMessage.encode(message).finish(); // ... do something with buffer // Decode an Uint8Array (browser) or Buffer (node) to a message var message = AwesomeMessage.decode(buffer); // ... do something with message // If the application uses length-delimited buffers, there is also encodeDelimited and decodeDelimited. // Maybe convert the message back to a plain object var object = AwesomeMessage.toObject(message, { longs: String, enums: String, bytes: String, // see ConversionOptions }); });
此外,如果愿意,可以通过省略回调来使用 promise 语法:
protobuf.load("awesome.proto") .then(function(root) { ... });使用 JSON 描述符
该库使用等同于 .proto 定义的 JSON 描述符。例如,以下内容与上面看到的 .proto 定义相同:
// awesome.json
{ "nested": { "awesomepackage": { "nested": { "AwesomeMessage": { "fields": { "awesomeField": { "type": "string", "id": 1 } } } } } } }
详细文档地址:https://protobufjs.github.io/protobuf.js/
完整示例代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" /> <title>BFW NEW PAGE</title> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/protobuf.7.2.3.js"></script> <script type="text/javascript"> var protoRoot = null; protobuf.load('/asset/user.proto', function(err, root) { if (err) throw err; protoRoot = root; // Obtain a message type var AwesomeMessage = root.lookupType("User"); // Exemplary payload var payload = { name: "第三方" }; // Verify the payload if necessary (i.e. when possibly incomplete or invalid) var errMsg = AwesomeMessage.verify(payload); if (errMsg) throw Error(errMsg); // Create a new message var message = AwesomeMessage.create(payload); // or use .fromObject if conversion is necessary // Encode a message to an Uint8Array (browser) or Buffer (node) var buffer = AwesomeMessage.encode(message).finish(); var xhr = new XMLHttpRequest(); xhr.open('POST', 'your.php'); xhr.setRequestHeader('Content-Type', 'application/octet-stream'); xhr.send(buffer); // ... do something with buffer }); function writeBuf(msgid, buf) { // buf 是protobuf消息的二进制结果 var length = buf.length; var buffer = new ArrayBuffer(buf.length + 4); // 消息ID占4位 var dv = new DataView(buffer); dv.setUint32(0, msgid, false); // 大端字节序 for (let i=0;i<buf.length;i++) { dv.setInt8(4+i, buf[i]); // 逐字节写入buffer } console.log(buffer); return buffer; } function readBuf(buf) { var dv = new DataView(buf); var msgid = dv.getUint32(0, false); var buf = new Uint8Array(buf, 4); // 截取消息ID后面的字节,交给protobuf解析 return [msgid, buf]; } function Request_Message(msg, req, callback) { // 将客户端请求的消息msg转成protobuf var RequestMessage = protoRoot.lookupType("dapianzi."+req); // 这里需要加上命名空间 var errMsg = RequestMessage.verify(msg); if (errMsg) throw Error(errMsg); var message = RequestMessage.fromObject(msg); var buffer = RequestMessage.encode(message).finish(); callback(buffer); // 下一步调用writeBuf 产生消息包,发送给服务器 } function Response_Message(buf, res, callback) { // buf 是readBuf()中返回的二进制串,这里交给protobuf解析成消息体 var ResponseMessage = protoRoot.lookupType("dapianzi."+res); var message = ResponseMessage.decode(buf); var object = ResponseMessage.toObject(message, { longs: String, enums: String, bytes: String, }); callback(object); // 进行客户端逻辑 } </script> <style> </style> </head> <body> </body> </html>
- WaveSurfer.js 是一个流行的用于在Web应用程序中创建音频可视化的JavaScript库
- decimal.js是JavaScript 中的任意精度十进制插件
- Konva.js是HTML5 Canvas的交互式图形和动画库
- text-image.iife.js是一款将文本图片视频转换成文字的插件
- timecat.js一款web屏幕录制与播放插件
- aat.js是一款滚动监测动画插件
- source-map.js是一个用于生成与提取 source map 的js插件
- excelize-wasm.js是一款在浏览器中读取操作修改excel电子表格XLT的插件
- offline.js是一款浏览器端检测网络断线在线离线状态的插件
- SimpleFlowChart是一款vue的流程图组件插件
- 在线AI文本写作写诗写小说文案工具
- 在线合同示范范本模板库工具
- 在线百度文库文档资料免费下载工具
- 在线c#代码运行IDE
- 在线SQL代码运行WEBIDE
- 在线Julia代码运行WEBIDE
- 在线Ruby代码运行WEBIDE
- 在线Dart代码运行WEBIDE
- 在线Groovy代码运行WEBIDE
- 在线R代码运行WEBIDE
- 在线Perl代码运行WEBIDE
- 在线D语言代码运行WEBIDE
- 在线vb代码运行WEBIDE
- 在线c代码运行IDE
- 在线html代码运行IDE
- 在线编程挑战平台
- 在线layui表单拖拽生成器工具
- 在线http api调试及api文档工具
- 在线代码可视化执行过程工具
- 在线c++代码运行WEBIDE
- 在线typescript代码运行WEBIDE
- 在线Lua代码运行WEBIDE
- 在线Vala代码运行WEBIDE
- 在线Ada代码运行WEBIDE
- 在线Elixir代码运行WEBIDE
- 在线Cobol代码运行WEBIDE
- 在线Haskell代码运行WEBIDE
- 在线AI编程助手工具
- 在线AI文本描述开发生成app工具
- 在线F#语言代码运行WEBIDE
- 在线免费假数据REST api接口工具
- 在线Clojure代码运行WEBIDE
- 在线Bash代码运行WEBIDE
- 在线Fortran代码运行WEBIDE
- 在线Ocaml代码运行WEBIDE
- 在线汇编代码运行WEBIDE
- 在线Object C代码运行WEBIDE
- 在线Scala代码运行WEBIDE
- 在线Swift代码运行WEBIDE
- 在线Erlang代码运行WEBIDE
- 在线Pascal代码运行WEBIDE
- 在线Lisp代码运行WEBIDE
- 在线ai程序员编程工具箱
- 在线go代码运行IDE
- 在线可视化拖拽开发llm大语言模型应用工具
- 在线css grid网格布局可视化代码生成器工具
- 在线变量命名神器工具
- 在线ai根据文本描述生成网页react代码
- 在线Kotlin代码运行WEBIDE
- 在线python代码运行IDE
- 在线php代码运行IDE
- 在线java代码运行IDE
- 在线时间戳转换工具
- 在线SQLite、Oracle、MariaDB数据库工具
- 在线redis工具
- 在线打开sqlite数据库工具
- 在线音乐音频提取分离人声与伴奏工具
- 在线视频格式转换工具
- 在线变声(男变女、女变男)工具
- 在线ai自动创作生成无版权背景音乐工具
- 在线ai视频字幕制作工具
- 在线万能视频下载工具
- 在线文本描述转视频工具
- 在线m3u8、rtmp、hls、flv直播录播视频播放工具
- 在线视频剪辑工具导航
- 在线录音工具
- 在线配音文字转语音工具导航
- 在线抖音视频去除水印工具
- 在线视频口型与声音翻译工具
- 在线视频背景抠图去水印工具
- 在线文本转语音和语音克隆工具
- 在线免费视频素材库
- 在线AI文字文案文章生成转视频工具
- 在线视频音频文件转文字字幕工具
- 在线文本文字转语音播报工具
- 在线m3u8转换mp4下载工具
- 在线站长工具网站统计导航
- 在线正则表达式可视化工具
- 在线正则表达式模板工具
- 在线正则匹配工具
- 自媒体公众平台网址导航
- 在线低代码无代码0代码应用平台导航
- 在线AI工具箱大全
- 在线虚拟主机网站空间vps云服务器导航
- 开源镜像网站导航
- 在线markdown编辑器工具
- DALL·E, Midjourney, Stable Diffusion, ChatGPT提示语库
- 在线ai内容检测工具
- 在线ai文字聊天类工具导航
- 在线农历老黄历日历工具
- 在线根据ip地址查询省市区经纬度位置工具
- 在线随机密码生成器工具
- 在线数字人虚拟人三维模型视频制作生成工具导航
- 在线代码AST抽象语法树可视化工具
- 学术科研论文网站导航
- 在线操作系统镜像下载
- 在线CLIP-Interrogator图片生成文本prompt工具
- 求职招聘接私活外包网址导航
- 在线常用按钮悬浮及加载动画合集代码cssfx
- 在线ai人工智能模型库数据集
- 域名注册云服务器导航
- 在线办公文档pdf word ppt excel工具导航
- 在线网盘云盘网站导航
- 在线科技技术资讯网站导航
- 在线技术课程学习网站导航
- 在线算法可视化工具
- 在线代码托管网站导航
- 在线项目管理团队协作任务管理工具导航
- 在线翻译工具导航
- 在线短链接短网址生成工具导航
- 在线图片转文字ocr识别工具导航
- 在线免费代理ip地址服务工具导航
- 在线邀请函投票问卷调查h5工具导航
- 在线文字统计工具
- 在线商标信息查询及注册导航
- 在线零宽字符unicode文字隐写工具
- 在线获得本机ip地址工具
- 在线图片隐写工具
- 在线数字转中文大写金额工具
- 在线base64字符串转文件工具
- ai自动化处理autogpt工具
- 在线linux命令大全查询学习工具
- 在线AI视频本地化翻译配音工具
- 在线文字转声音播放工具
- 在线代码截图美化工具
- 在线文档音视频图片格式转换工具
- 在线思维导图制作工具
- 在线WASI程序运行工具
- 在线流程图制作工具
- 在线Ai换脸工具
- 所有pc及移动设备浏览器user-agent
- 在线AI文本生成三维模型工具
- 在线ip地址转换工具
- 在线以图搜图查找相似图片工具导航
- 在线便签记事本工具
- 在线代码转图片美化截图工具
- 在线计算器工具
- 在线扫描主机端口是否开放工具
- 在线屏幕颜色提取器取色器拾色器工具
- 在线AI数字人克隆工具(包括人像与声音克隆)
- 在线htpasswd生成器工具
- 在线robots.txt文件生成工具
- animate.css常见动画效果合集及classname类名
- AI网站搭建建站工具
- emmet语法指南手册
- 在线域名icp备案查询工具
- 在线ChatGPT和Bard的AI prompt提示语库工具
- 在线三维模型设计导入编辑导出工具
- 在线三维模型格式转换工具
- 在线免费可商用三维动画库
- 在线图片生成三维模型工具
- 在线三维3d模型库元宇宙导航
- 在线格式化json数据工具
- 在线智能证件照制作一站式工具
- 在线ps图片编辑处理工具导航
- 在线人物图像转换成卡通漫画图像工具
- 在线安卓ios应用程序图标批量生成器工具
- 在线图片批量压缩工具
- 在线二维码美化工具
- 在线网页图片批量下载工具
- 在线图片无损放大变清晰工具导航
- 在线svg图片压缩工具
- 在线svg转base64工具
- 在线AI多图融合工具
- 在线二维码识别工具
- 在线生成二维码工具
- 在线svg转图片工具
- 在线图片转svg工具
- 在线ps图像处理工具
- 在线gif分解拆分图片工具
- 在线icon生成工具
- 在线图片裁剪工具
- 在线图片压缩工具
- 在线pdf、word文件文档转扫描打印图片效果工具
- 在线判断图片是否ps过工具
- 在线打开预览pdf转图片下载工具
- 在线图片base64工具
- 在线图片背景消除抠图工具导航
- 在线位图图片转svg矢量图工具
- 在线图片加水印工具
- 在线生成各种类型条形码工具
- 在线图片涂抹清除物体水印工具导航
- 在线生成现实中不存在虚拟人物照片头像工具
- 在线复制网页过滤样式工具
- 在线html属性清除工具
- 在线去除文本空格工具
- 清除html标签转换成纯文本工具
- 在线MD5 SHA1 AES加密工具
- 在线RSA非对称加密工具
- 在线ai智能生成制作ppt工具
- 在线图片视频生成3d模型工具
- 在线AI克隆自己工具
- 在线多图片合成制作gif动图工具
- 在线代码ppt展示工具
- 在线ai装修设计工具
- 在线AI文本生成app ui原型图效果图工具
- AI将照片变成高清矢量图工具
- 在线ai帮你设计与发布部署网站工具
- 在线三维模型场景设计工具
- 在线SVG图形绘制工具
- avue表单拖拽设计器
- 在线AI广告条海报banner设计工具导航
- 在线产品原型UI设计制作工具导航
- 在线logo ai设计制作工具导航
- 在线ppt PowerPoint演示文档制作工具
- elementui表单在线生成器
- 在线bootstrap模块化精美网页设计工具
- 在线xmind思维导图工具
- 在线bootstrap拖拽生成网页工具
- 在线流程图拓扑图绘制工具
- 在线拖拽生成网页工具
- 在线设计灵感网站导航
- 在线画板工具
- 在线免费免扣图片素材导航
- 在线文字描述生成图片艺术画作工具
- 在线图片转Ascii码工具
- 在线公众号文章图文排版工具
- 在线简历制作工具
- 在线AI人工智能绘画画画(文本生成图像)工具
- 在线配色工具导航
- 在线软著软件作品著作权申请知识产权版权保护
- 在线发明专利申请
- 在线文本对比工具
- 网页设计师配色表
- 在线颜色转换工具
- 在线html、js格式化压缩混淆工具
- 在线css格式化压缩工具
- 在线去除html中多余css代码的工具
- 在线less转css工具
- 在线javascript代码混淆工具
- 在线javascript混淆加密js代码解码反编译反混淆解密工具
- 在线中文转Ascii工具
- 在线中文转UTF-8工具
- 在线Stylus代码转CSS代码工具
- 在线进制转换工具
- 在线中文与Unicode转换工具
- 在线汉字转拼音工具
- 在线字符转hex互转工具
- 在线URL编码解码工具
- 在线中文简体与繁体相互转换工具
- 在线base64编码解码解密工具
- 在线sass、scss转css代码工具
- 在线xml与json互相转换工具
- 在线html代码转义工具
- 在线vue文件解析预览转换html工具
- 在线图片字体等文件转base64工具
- 在线pug转html工具
- 在线斜杠x十六进制编码解码解密
- html特殊字符表在线工具
- 所有http状态码解释
- 在线三维3d图标素材库
- 在线免费图标库工具导航
- 在线免费图片资源素材库工具导航
- 在线免费音效声效音乐AI声音素材库工具导航
- 在线免费商用字体库导航
- 在线插画插图素材工具导航
网友评论0