问题标签 [protobuf.js]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - protobuf.js 反射与静态代码
我不知道何时使用加载 .proto 文件(反射)的方法更好,何时使用 pbjs 脚本/工具生成静态代码更好。
带反射的方法:
使用静态代码的方法:
根据protobuf.js Wiki,两种方法的性能是相同的。
有人可以向我解释哪种方法用于哪个目的?
我在互联网上搜索了很多,但无法得到这个问题的答案。从编码的角度来看,我并没有陷入困境,而是想弄清楚哪种方法更适合。
javascript - protobuf.js:是否有同步加载静态代码的方式
我正在尝试同步加载 protobuf.js 静态代码(使用 pbjs 生成)。
根据文档,记录的方法是异步的。
异步加载是这样完成的:
由于我的进一步代码只能在加载完成后执行,我相信同步加载会更好。
有什么方法可以同步加载它还是有任何调整来完成它?
javascript - protobuf.js 将 proto 文件转换为 JSON 描述符,重复丢失
我正在使用Protobuf.js构建一个节点包,其中包含我们的协议并为该包中定义的 Proto Messages 提供编码和解码功能。我可以使用 .proto 文件(.proto 文件的加载发生在运行时),但是由于模块需要在客户端可用,并且我无法将 .proto 文件打包到解析的 .js 文件中(用browserify构建),我需要使用一种方法,在build.js中启用打包。
输入 JSON 描述符。
json文件可以打包(browserify解决的需求)。.json 中也可以使用原型类型定义
我将 .proto 文件翻译成 .json 文件,并用我的示例数据进行了尝试。不幸的是,它因重复字段而失败。
.proto 文件看起来像这样:
我翻译成这个 JSON 描述符
如果我没记错的话,字段是必需的。
当我对示例数据进行编码和解码时,它会在重复字段处停止:(请注意,地图工作正常)。
我还检查了我的根目录以了解加载的类型的外观,它看起来与我的定义完全相同,除了重复丢失:
如何在 JSON 描述符中正确定义重复字段?
如果有一种方法可以预先包含 proto 文件而不是在运行时加载它们,以便我可以用 browserify 将它们包装起来,我也会接受这个作为解决方案。
node.js - 在项目中安装 pbjs 后找不到 pbjs 命令
我正在使用 protobuf 进行离子项目,并且我已经安装了 protobuf。弓我想安装 pbjs 工具。我使用 npm install pbjs 在项目目录中这样做了。但是当我使用 pbjs 后跟有效参数时,我得到 -bash: command not found 'pbjs'
我究竟做错了什么?
javascript - protobuf.js 是否能够从流中读取?
我是新手Node.js
。目前我有一个二进制文件,其中包含很多 protobuf Message
。我不知道如何将它们分开。我也不明白protobuf 文档Reader
中Message.decodeDelimited(reader: Reader|Uint8Array): Message
提到的内容。
目前我的代码如下所示:
但我只能收到第一条消息。
http - 使用 Node-RED 发布二进制缓冲区有效负载
我正在尝试使用 Node-RED 通过 POST 发送一个字节数组。我可以使用此模块成功创建缓冲区并将其存储在msg.payload
. 但是我不知道如何将它作为参数添加到 http 请求节点中。
接收应用程序需要包含引号。所以我在以下 url: 中使用了有效负载localhost:port/path?var=\"{{payload}}\"
,但它给出了
“将 http 参数转换为 args 时出错:无效字符 '\' 寻找值的开头”
如果在不带引号的请求 url 中使用它:localhost:port/path?var={{payload}}
没有任何通过(我可以在另一端看到)。
由于另一端的应用程序,我正在使用 Protobuf,但我也尝试过创建缓冲区,如此处所述。然而,什么都没有改变。
c# - Protobuf C# 无法反序列化来自 protobufjs 的消息
我试图反序列化由特定网站上的脚本发布的消息。我查看了脚本并注意到它使用了 protobufjs。消息结构是从服务器的 JSON 文件加载的,看起来像这样字符串化:
然后它创建一个“InteractionCollection”消息的新实例并将新的交互、mouseMovements 和标志推送给它。
在脚本结束时,它会将数据以序列化格式发布到服务器,如下所示:
我正在使用 C#,所以我通过 NuGet (Google.Protobuf) 安装了官方的 Google Protocol Buffer Package,并创建了一个 proto 文件来复制上面的 json 描述符:
然后我使用 NuGet 包附带的 protoc.exe 编译了 proto 文件,并将生成的类包含在我的项目中。然后我创建了一个测试 InteractionCollection 并将其序列化:
在网站上,它序列化了相同的消息。
但是,我从 C# 项目中获得的数据与网站发布的数据略有不同。我的原始文件是错误的还是有其他原因。显然,这意味着我也不能反序列化来自网站的数据。C#:
或者
JS:
或者
我很抱歉这是一个这么长的问题,但我已经摆弄了一个多星期,我真的无法弄清楚问题是什么。感谢您的耐心等待!
更新:
经过一些测试,在本地运行 protobufjs,我注意到 C# 版本的 Protobuf 将空字符串解释为 null,因此将整个字段排除在外(就像您忽略可选字段时一样),而 protobufjs 将其序列化为:
我还尝试使用 protobuf-net 而不是 Google 版本进行相同的测试,并将空字符串序列化为:
有没有办法将此行为更改为 protobufjs 使用的行为?
node.js - 传递只有值的 proto 字段
我有一项服务可以使用 protobuf 将对象的输入数组传递给服务器,并在服务器上成功接收它。问题是我根据响应定义得到了响应。这是回复
这是输入的定义
如您所见,有些字段是空的。我考虑过使用oneof
如果您的消息包含许多可选字段,并且最多同时设置一个字段,则可以强制执行此行为并使用 oneof 功能节省内存。
我认为oneof
这是选择传递具有值但遇到错误的字段的正确方法。然后我像这样回滚我的代码
如何预先省略原型中的那些空字段
javascript - 如何读取响应 HTTP 请求而收到的 angular4 中的 protobuf 对象
尝试在 angular4 中读取 protobuf 对象而不是 JSON 对象。
我找到了这个dcodeIO/protobufjs。但我不明白我应该如何在我的项目中使用它?
我还尝试使用 typings install dt~protobufjs --global 为 protobufjs 安装类型。当我导入它时,WebStorm 说找不到模块 protobuf。
任何帮助!赞赏!
javascript - 如何使用导入加载 proto 文件
我正在使用dcodeIO/protobuf.js库(版本 6.8.4)来解析浏览器中的 protobuf 消息。只要不导入另一个 proto 文件,我就可以使用简单的 proto 文件。
在主文件中导入其他 proto 文件会破坏一切。
这就是我所拥有的:
文件结构
/li>messageA.proto
/li>messageB.proto
/li>使用 6.8.4:
/li>
.
5.0:
.
/li>