【问题标题】:How to dynamically create gRPC proto schema in nodejs?如何在 nodejs 中动态创建 gRPC 原型模式?
【发布时间】:2019-04-09 06:20:17
【问题描述】:

可以通过提供文件路径(PROTO_PATH)来加载.proto文件

var packageDefinition = protoLoader.loadSync(
    PROTO_PATH,
    {keepCase: true,
     longs: String,
     enums: String,
     defaults: true,
     oneofs: true
    });

如何在 node.js 中动态地做到这一点? 我想在运行时构建原型模式(数据类型和函数)。

【问题讨论】:

  • “动态执行”是什么意思?您是在问如何以某种方式使该特定代码行更具动态性,还是您希望做一些与该行类似的事情,或者其他什么?
  • 我不想提供 .proto 文件作为输入,而是想通过 grpc API 构造 .proto。这可能吗?
  • @murgatroid99:这可能吗?

标签: protocol-buffers grpc protobuf.js grpc-node


【解决方案1】:

@grpc/proto-loader 库专门用来加载.proto 文件,不支持在运行时动态构造protobuf 消息或服务类型。

但是,Protobuf.js 确实支持在运行时构造 protobuf 反射类型 (see its README for details),并且可以使用它来显式构造 PackageDefinition 对象,然后将其加载到 grpc 库中。 this document 中的类型定义可能更清晰。

【讨论】:

  • 非常感谢您解惑。是的,protobufjs 可能会有所帮助-但我在其中找不到简单的客户端-服务器示例 :( 它使用 json proto。我提出了一个问题github.com/dcodeIO/protobuf.js/issues/1132,但还没有答案。你能指出任何例子吗代码,因为您似乎正在编写大量 gRPC ?
  • 我不太确定你在问什么,但我想明确一点,我并不是建议你使用 protobuf.js 创建客户端或服务器。相反,我建议您使用 protobuf.js 来组装您想要的类型信息,然后将其转换为可以加载到 gRPC 中的数据类型。我建议查看the proto-loader library itself 的代码,了解如何执行第二部分的示例。
  • 我目前正在做这个 1. 读取一个 json 文件。 2. 将其转换为 .proto 文件(通过字符串 concat!) 3. 使用此 proto 文件运行服务器和客户端。我想摆脱创建 .proto 文件的第 2 步。我想在内存中创建一个 proto 文件,或者如果有一个实用程序可以理解 json 等价于该 proto 文件(如 protobuf)将是狂热的。这样所有三个步骤都可以一次无缝运行。 Protobuf 确实适用于 json 文件 - 但是没有简单的客户端和服务器的示例 :( 因为它希望我的查询有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2016-03-06
  • 2020-03-18
  • 2023-01-31
  • 1970-01-01
相关资源
最近更新 更多