【问题标题】:What is the difference between dynamically and statically generated grpc code?动态和静态生成的 grpc 代码有什么区别?
【发布时间】:2017-08-30 04:27:53
【问题描述】:

在 GRPC 客户端的examples 中有两种实现,一种是在运行时加载和处理.proto 文件,另一种是使用protoc 编译它们。

我的问题是:有什么区别?文档只说“它们的行为相同”,但肯定有区别吧?

【问题讨论】:

    标签: node.js grpc


    【解决方案1】:

    从根本上说,主要区别在于您提到的那个:使用动态代码生成,.proto 文件在运行时加载和解析,而使用静态代码生成,.proto 文件被预处理为 JavaScript。

    动态代码生成更易于使用,可能更易于调试,并生成接受常规 JavaScript 对象的代码。

    静态代码生成(使用 protoc)需要用户创建 protobuf 对象,这意味着将更早地完成输入验证。也是与其他语言更加一致的工作流程。

    【讨论】:

    • 好的,这样看起来动态代码生成总是可行的,对吧?我的意思是,如果您可以将.proto 文件放到grpc 库中并完成它,为什么还要经历这么多麻烦呢?我还注意到在使用静态代码时必须使用生成的 getter 和 setter,这使得使用起来有点麻烦,所以我明白为什么动态代码会更容易。
    • @Sander 正如@murgatroid99 提到的,静态代码生成的一个优点是输入验证。想象一下,您的请求有一个名为last_name 的字段,而您的客户将其输入错误为lastName。如果使用静态生成,那么在请求发送到服务器之前就会检测到这个错误,因为代码知道lastName 是一个不存在的字段。相反,如果使用动态代码生成,则此类错误可能会导致静默失败。也就是说,last_name 将保留为其默认值。
    • 这两种方法在性能上有什么区别?
    • 此外,如果我们使用 TypeScript,静态代码生成将提供类型、接口等类型安全的东西。它将标准化您的代码。
    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2013-07-21
    • 2013-12-12
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多