【发布时间】:2020-09-09 01:33:06
【问题描述】:
谁能告诉我ServerBuilder和NettyServerBuilder有什么区别? 最新说明
帮助简化基于 Netty 的 GRPC 服务器构建的构建器。
两者都服务于 http2/grpc。两者都可以提供 GRPC 服务。 这是否意味着第二个(Netty)在协议/传输级别上比前一个拥有更多的控制权?
【问题讨论】:
谁能告诉我ServerBuilder和NettyServerBuilder有什么区别? 最新说明
帮助简化基于 Netty 的 GRPC 服务器构建的构建器。
两者都服务于 http2/grpc。两者都可以提供 GRPC 服务。 这是否意味着第二个(Netty)在协议/传输级别上比前一个拥有更多的控制权?
【问题讨论】:
ServerBuilder 是一个抽象类,不能直接使用,而NettyServerBuilder 是一个具体类(使用forPort 或forAddress 实例化)。
gRPC-java 带有各种传输实现(参见gRPC transport),Netty 是主要的传输实现。
【讨论】:
ServerBuilder 是抽象的,但ServerBuilder.forPort() 允许创建具体实例。
ServerBuilder 是具有稳定 API 的通用构建器。一般推荐。
NettyServerBuilder 特定于 Netty 传输并具有更多高级选项。但是,它是不稳定的 API。任何特定于 Netty 的方法都可能随时更改,尽管在实践中它相对稳定,因为 gRPC 开发人员意识到它被广泛使用。但破损可能来自其他来源。例如,如果 gRPC 从 Netty 4 升级到 Netty 5(尚不存在,但正在开发中),gRPC 可能会删除整个 io.grpc.netty.NettyServerBuilder 类并添加一个新的 io.grpc.netty5.NettyServerBuilder 类。 gRPC 甚至可以选择完全放弃 Netty 并使用 SomeOtherNetworkingLibrary。
库绝不能使用不稳定的 API,因为它们不控制正在使用的 gRPC 的版本。应用程序可以使用不稳定的 API,但应注意 API 无法得到保证,并且它们可能需要在未来支付额外费用才能保持最新状态。
【讨论】: