双向 RPC 调用会打开多个 http2 连接吗?
我正在编写一个与我不拥有/控制的 GRPC 服务器通信的 GRPC 客户端。我正在使用@grpc/grpc-js包。有人问我这个库是否会打开到 grpc 端点的多个 HTTP2 连接,我对源代码不够熟悉,无法回答这个问题。我的拨打电话和打开流的代码如下所示
const protoLoader = require('@grpc/proto-loader')
const packageDefinition = protoLoader.loadSync(
__dirname + '/path/to/v1.proto',
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
})
const packageDefinition = grpc.loadPackageDefinition(packageDefinition).com.foo.bar.v1
const client = new packageDefinition.IngestService(
'server.url.here.com:443',
grpc.credentials.createSsl()
)
const stream = client.doTheThing(metadata)
我自己已经开始研究这个问题,我发现它是启动 http2 连接Subchannel
的对象,所以它似乎是每个子通道一个 http2 连接。但是,我不清楚调用、http2call 流、主通道、子通道、负载均衡器和过滤器堆栈之间的关系,我无法推断何时(如果有的话)第二个 HTTP2 连接将永远打开。
理想情况下,如果有人可以回答这个问题,双向 RPC 调用会打开多个 http2 连接吗?那太好了。如果这个答案太复杂,我会选择一个关于这些不同对象之间的关系的操作理论,这样我就可以自己推理这个,或者你可能认为会有所帮助的任何其他事情。