代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

Node JS:双向GRPC调用是否会打开多个http2连接?

  •  0
  • Alana Storm  · 技术社区  · 6 年前

    双向RPC调用是否会打开多个http2连接?

    @grpc/grpc-js

    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)        
    

    我自己也开始调查这件事,我发现这是最重要的 Subchannel that initiate the http2 connections ,因此似乎每个子通道都有一个http2连接。但是,调用、http2call流、主通道、子通道之间的关系,负载平衡器和过滤器堆栈对我来说并不清楚,我也无法解释第二个HTTP2连接何时会被打开(如果有的话)。

    那太好了。如果这个答案太复杂的话,我会接受一个关于这些不同物体之间的关系是什么的操作理论,这样我就可以自己思考这个问题,或者你可能认为有帮助的任何东西。

    0 回复  |  直到 6 年前
        1
  •  3
  •   murgatroid99 dhg    6 年前

    无论请求是哪种流类型,gRPC都将使用每种流类型 单连接 。这是选择HTTP/2作为gRPC基础协议的一个主要原因:将流多路复用到连接上已经是该协议的一部分。

    在你提到的课程中 Channel 是连接上的API级抽象。通道表示到目标字符串引用的后端的任意数量的连接。它将根据需要自动建立连接,以处理启动的任何请求。

    这个 Resolver DnsResolver 将查找DNS记录。

    LoadBalancer 确定要建立的特定连接以及如何在这些连接之间分发请求。默认的负载平衡策略“pick first”只将所有请求发送到最先成功建立的连接。还有“循环”负载平衡策略,它尝试建立到多个后端的连接,然后在启动调用时循环使用它们。

    A. Subchannel 表示到单个后端的连接,如果该连接断开,则可以重新建立该连接。

    过滤器堆栈在从顶级API启动请求到在网络上发送请求之间对请求应用一些转换。