代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

这就是Grpc之间的区别。果心频道和Grpc。网客户GrpcChannel?

  •  0
  • Álvaro García  · 技术社区  · 6 年前

    我正在用Grpc做一些测试,我意识到有这两种通道,但我不知道它们的区别。

    但当我拿证书工作的时候,Grpc。网客户GrpcChannel我可以设置证书,但我得到一个错误,DNS没有解决。如果我使用Grpc。果心通道,我可以调用该服务,但由于证书的原因,我得到了一个错误,错误是:HTTP/2 over TLS未在仅HTTP/2的端点上协商。

    这两个频道的区别是什么?

    谢谢

    0 回复  |  直到 6 年前
        1
  •  10
  •   Francis    6 年前

    Grpc。果心Channel基于C核心库,这些库构成了它支持的所有语言变体(C++、C#、PHP、Objective-C、Python、Ruby等)的基本代码库

    Grpc。网客户GrpcChannel是为您而建的。NET核心使用熟悉的HttpClient对象,该对象现在支持Http/2。

    主页 grpc-dotnet 声明:

    GRPC为您服务。NET并不能取代C#的gRPC(gRPC C#API优于本机) C核心二进制文件)。这些实现共存并共享许多 使用相同的API以避免锁定。目前还没有这样的计划 替换另一个的实现。 C#的gRPC是 gRPC支持的框架的推荐解决方案。NET则不然 支持,例如。NET框架。

    当你检查Grpc的代码时。网客户GrpcChannel,你可以看到 内部Httpclient 对象,用于进行异步调用和取消挂起的请求。

    Grpc的代码。果心通道似乎将其调用委托给本机生成的grpc代码。这是我在有限的时间内所能做到的。

    有趣的是,在网络的ssl验证部分。客户GrpcChannel,它实际上声明在异常消息传递中使用HttpClient。

    if (!string.IsNullOrEmpty(rootCertificates) ||
        keyCertificatePair != null ||
        verifyPeerCallback != null)
    {
        throw new InvalidOperationException(
            $"{nameof(SslCredentials)} with non-null arguments is not supported by {nameof(GrpcChannel)}. " +
            $"{nameof(GrpcChannel)} uses HttpClient to make gRPC calls and HttpClient automatically loads root certificates from the operating system certificate store. " +
            $"Client certificates should be configured on HttpClient. See https://aka.ms/AA6we64 for details.");
    }