问题标签 [protobufjs]

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 投票
2 回答
2578 浏览

javascript - Netty、ProtoBuf、WebSocket;如何将 BinaryWebSocketFrame 转换为 protobuf 类型?

我有一个使用 protobuf 的服务器。处理程序定义为 -

管道如下 -

有了它和 Java 客户端,一切正常。

现在,为了能够使用 Javascript websocket 进行连接,我修改了服务器管道如下 -

以下是基于protobufjs库的 Javascript 客户端代码 -

运行上述代码时,服务器在 protobuf 解码器处失败。以下是堆栈跟踪 -

有没有人一起使用过 Netty、ProtoBuf 和 WebSocket?如何做到这一点?

0 投票
1 回答
243 浏览

javascript - 使用 requirejs 加载:long、ByteBuffer 和 ProtoBuff

处理一个使用 ProtoBuff 获取其内容的项目。通过在 HTML 中加载 JavaScript 使其工作一次。现在重构使用 requirejs 来加载脚本。但是当我尝试使用脚本时,它会给出一个错误,告诉我脚本没有加载。

  • Require.js 在 index.html 中加载
  • Bower 用于管理依赖项。

我很确定我在这里遗漏了一件(简单的)事情,希望有人能提供帮助。

long.js、ByteBuffer.js 和 ProtoBuf.js 文件都与调用它的 App.js 在同一个映射中。

*虽然这个关于 requirejs 和 ByteBuffer的问题看起来很有希望,但我想我在这里遗漏了一些东西。

这确实有效,这些文件中的函数可以在其余范围内访问:

0 投票
1 回答
2017 浏览

node.js - Protobuf 无法解码缓冲区

protobuf.js 版本:^6.2.1

缓冲

083515604859581840220a0d6048595815bdf426422a0a0d7047595815bdf426

代码:

.proto 文件:

错误:

/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390 throw indexOutOfRange(this, length); ^

RangeError: index out of range: 23 + 10 > 32 at RangeError (native) at indexOutOfRange (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:13:12) at BufferReader.skip (/home /deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390:19) 在 BufferReader.ReaderPrototype.skipType (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:410:18 ) 在 Type._PulseFlagSample$decode [as decode] (eval at eof (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25), :19:7)在 Type.decode_setup [as decode] (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/type.js:370:7) at Type._PulseFlagData$decode [as decode] (eval at eof (/home/甲板/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25), :16:27) 在 Type.decode_setup [as decode] (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/type.js:370:7) at /home/deck/NetBeansProjects/ lora/server.js:42:50 完成 (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/root.js:84:9)

0 投票
1 回答
1129 浏览

javascript - Javascript protobuf 性能

nodejs 中有两个不同的模块可用于 protobuf -

  1. https://github.com/dcodeIO/ProtoBuf.js/
  2. https://github.com/google/protobuf/tree/master/js - 官方但功能比其他模块少。具体来说,没有打字稿集成。

哪个性能更好?

0 投票
1 回答
3643 浏览

node.js - protobufjs :编码/解码具有 Any 组件的消息

我正在使用 protobufjs 6.6.3(在 nodejs 6.9.1 上运行)简而言之,我正在尝试对具有 Any 类型组件的消息进行编码/解码,我想知道我是否做得对......

我最初的问题是:当我解码 TestMessage 类型的消息时发生了什么:它是否也会自动解码 Any 部分,还是我需要“手动”进行解码?
简而言之,这就是我所做的:

  • 创建了一条新的任何消息
  • 将其附加到 TestMessage 消息
  • 编码/解码 TestMessage 消息;然后,解码 TestMessage 的 Any 部分

代码:

好的......所以,问题:

  1. 当我构建 TestMessage 时,详细信息(根据原型)应该用 AnyMessage 消息填充,而不是用编码的 AnyMessage 消息填充,对吗?
  2. 编码的 TestMessage 消息的解码,不会自动解码 AnyMessage 组件(详细信息),对吗?至少,在我看来是这样的……
  3. 最让我困惑的是什么,因此我需要上述确认......我应该在哪里使用 AnyMessage 编码/解码(我的意思是sampleAnyEncodedBuffer = AnyMessageType.encode(sampleAny).finish()调用和解码一个)?只是为了编码/解码简单的 AnyMessage(简单我的意思是不是“父”消息的一部分)?
    让我这样说:我正在尝试匹配现有的 Java 打包/解包函数。在我的示例中,我现在将这些与缓冲区<->字符串转换“关联”(参见我的最后一个 console.log 行),我没有看到调用 AnyMessageType.decode 的需要......我错了吗?
0 投票
1 回答
2002 浏览

javascript - Protobuf js 以字节数组形式发送消息

我正在尝试在节点 js 中发送 proto3 消息并编码为字节数组。但是根据 protobuf js,消息被编码为缓冲区(而不是字节数组),而不是在节点 js 中。有没有办法将此消息编码为字节数组?

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 回答
1418 浏览

sinon - 向 GRPC 服务器节点发送 Http2 请求,非法缓冲区

我正在尝试利用 protobuf.js 并为其提供传输层(rpcimpl),因为它与传输无关。

我可以通过protobuf(loadSync,lookup)将所有proto文件成功转换为直接grpc客户端和服务器到grpc(loadObject)。这使我能够通过测试获得服务器和客户端的具体 grpc 实现。下一步是测试 protobuf 客户端(不稳定)到 grpc 服务器稳定。这更多是出于好奇,看看我们是否可以独立于 grpc 的库本身而只使用 protobuf.js 。

我失败的测试总是向 grpc 服务器发送一个空缓冲区。导致“非法缓冲区错误”。

客户端.js

getProtoPath.js

helloworld.proto

helloworld.spec.js

0 投票
1 回答
5303 浏览

grpc - 将 protobuf 映射表示为 json

我正在使用基于 protobuf.js 的 grpcc 来测试我的 grpc 服务 API

我的.proto文件:

我尝试了以下 json 正文来发送请求:

但这会产生以下错误:

如何正确地将 protobuf 映射表示为 json?

0 投票
0 回答
329 浏览

angular5 - 如何将 javascript 和 d.ts 文件添加到 Angular 2 项目

我想将 protobufjs 集成到我的 angular 2 项目中,根据这里,首先我安装 protobufjs,然后使用 CLI 和我的 .proto 文件生成静态代码(js 文件和相关的 d.ts 文件),例如我得到一个.js 和广告。

然后我把 a.js 和 adts 放到某个地方,并将 adts 导入到使用它的组件文件中。导入指令如下:

我的问题是:a.js 应该放在哪里?以及 Angular 2 应用程序如何将广告链接到底层的 a.js 文件?

注意:我不想在 index.html 中包含 a.js。Angular 2 应用程序使用 yarn 作为包管理器,使用 webpack 作为模块捆绑器。

非常感谢任何帮助。