问题标签 [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.

0 投票
1 回答
1002 浏览

javascript - protobuf.js 反射与静态代码

我不知道何时使用加载 .proto 文件(反射)的方法更好,何时使用 pbjs 脚本/工具生成静态代码更好。

带反射的方法:

使用静态代码的方法:

根据protobuf.js Wiki,两种方法的性能是相同的。

有人可以向我解释哪种方法用于哪个目的?

我在互联网上搜索了很多,但无法得到这个问题的答案。从编码的角度来看,我并没有陷入困境,而是想弄清楚哪种方法更适合。

0 投票
2 回答
609 浏览

javascript - protobuf.js:是否有同步加载静态代码的方式

我正在尝试同步加载 protobuf.js 静态代码(使用 pbjs 生成)。

根据文档,记录的方法是异步的。

异步加载是这样完成的:

由于我的进一步代码只能在加载完成后执行,我相信同步加载会更好。

有什么方法可以同步加载它还是有任何调整来完成它?

0 投票
1 回答
2775 浏览

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 将它们包装起来,我也会接受这个作为解决方案。

0 投票
1 回答
2698 浏览

node.js - 在项目中安装 pbjs 后找不到 pbjs 命令

我正在使用 protobuf 进行离子项目,并且我已经安装了 protobuf。弓我想安装 pbjs 工具。我使用 npm install pbjs 在项目目录中这样做了。但是当我使用 pbjs 后跟有效参数时,我得到 -bash: command not found 'pbjs'

我究竟做错了什么?

0 投票
0 回答
792 浏览

javascript - protobuf.js 是否能够从流中读取?

我是新手Node.js。目前我有一个二进制文件,其中包含很多 protobuf Message。我不知道如何将它们分开。我也不明白protobuf 文档ReaderMessage.decodeDelimited(reader: Reader|Uint8Array): Message提到的内容。

目前我的代码如下所示:

但我只能收到第一条消息。

0 投票
1 回答
1382 浏览

http - 使用 Node-RED 发布二进制缓冲区有效负载

我正在尝试使用 Node-RED 通过 POST 发送一个字节数组。我可以使用此模块成功创建缓冲区并将其存储在msg.payload. 但是我不知道如何将它作为参数添加到 http 请求节点中。

接收应用程序需要包含引号。所以我在以下 url: 中使用了有效负载localhost:port/path?var=\"{{payload}}\",但它给出了

“将 http 参数转换为 args 时出错:无效字符 '\' 寻找值的开头”

如果在不带引号的请求 url 中使用它:localhost:port/path?var={{payload}}没有任何通过(我可以在另一端看到)。

由于另一端的应用程序,我正在使用 Protobuf,但我也尝试过创建缓冲区,如此处所述。然而,什么都没有改变。

0 投票
0 回答
521 浏览

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 使用的行为?

0 投票
0 回答
105 浏览

node.js - 传递只有值的 proto 字段

我有一项服务可以使用 protobuf 将对象的输入数组传递给服务器,并在服务器上成功接收它。问题是我根据响应定义得到了响应。这是回复

这是输入的定义

如您所见,有些字段是空的。我考虑过使用oneof

如果您的消息包含许多可选字段,并且最多同时设置一个字段,则可以强制执行此行为并使用 oneof 功能节省内存。

我认为oneof这是选择传递具有值但遇到错误的字段的正确方法。然后我像这样回滚我的代码

如何预先省略原型中的那些空字段

0 投票
1 回答
847 浏览

javascript - 如何读取响应 HTTP 请求而收到的 angular4 中的 protobuf 对象

尝试在 angular4 中读取 protobuf 对象而不是 JSON 对象。

我找到了这个dcodeIO/protobufjs。但我不明白我应该如何在我的项目中使用它?

我还尝试使用 typings install dt~protobufjs --global 为 protobufjs 安装类型。当我导入它时,WebStorm 说找不到模块 protobuf。

任何帮助!赞赏!

0 投票
1 回答
7045 浏览

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>