• gRPC的Go语言实现


    gRPC-Go

    gRPC的Go实现:一个高性能、开源、通用的RPC框架,将移动和HTTP/2放在首位。有关更多信息,请参阅Go gRPC文档,或直接进入快速入门。

    Prerequisites

    • Go:三个最新的主要版本中的任何一个。

    Installation

    使用Go模块支持(Go1.11+)),只需添加以下导入

    import "google.golang.org/grpc"
    

    ,然后go [build|run|test]将自动获取所需的依赖项。

    否则,要安装grpc-go包,请运行以下命令:

    $ go get -u google.golang.org/grpc
    

    注意:如果您试图从中国访问grpc-go,请参阅下面的常见问题解答。

    Learn more

    FAQ

    I/O Timeout Errors

    golang.org域可能被某些国家阻止。go get发生这种情况时,通常会产生如下错误:

    $ go get -u google.golang.org/grpc
    package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
    

    要构建Go代码,有几个选项:

    • 设置一个VPN并通过它访问google.golang.org。
    • 没有Go模块支持:git clone手动回购:git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc 您需要对golang.org中的所有grpc依赖项执行相同的操作,例如golang.org/x/net
    • 有了Go模块支持:可以使用go modreplace特性为golang.org包创建别名。在项目的目录:go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest go mod tidy go mod vendor go build -mod=vendor 中,同样需要对golang.org上托管的所有可传递依赖项执行此操作。有关详细信息,请参阅golang/go第28652期。

    编译错误,未定义:grpc.SupportPackageIsVersion

    如果您使用的是Go模块:

    确保您的gRPC-Go版本是required,在包含生成的.pb.go文件的同一模块中的相应版本。例如,SupportPackageIsVersion6需要v1.27.0,因此在go.mod文件中:

    module <your module name>
    
    require (
        google.golang.org/grpc v1.27.0
    )
    

    如果不使用Go模块:

    更新proto包、gRPC包,并重新生成.proto文件:

    go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
    go get -u google.golang.org/grpc
    protoc --go_out=plugins=grpc:. *.proto
    

    如何打开日志记录

    默认记录器由环境变量控制。像这样打开所有东西:

    $ export GRPC_GO_LOG_VERBOSITY_LEVEL=99
    $ export GRPC_GO_LOG_SEVERITY_LEVEL=info
    

    RPC失败,错误为"code = Unavailable desc = transport is closing"

    此错误表示RPC正在使用的连接已关闭,可能有许多原因,包括:

    1. mis-configured传输凭据,握手时连接失败
    2. 字节被中断,可能是中间的代理
    3. server shutdown
    4. Keepalive参数导致连接关闭,例如,如果您已将服务器配置为定期终止连接以触发DNS查找。如果是这种情况,您可能需要增加MaxConnectionAgeGrace,以允许更长的RPC调用完成。

    调试它可能很棘手,因为错误发生在客户端,但关闭连接的根本原因在服务器端。打开客户端和服务器上的日志记录,查看是否有任何传输错误。

    转载:https://www.5axxw.com/wiki/content/yp5xgy

  • 相关阅读:
    第二节. SignalR开篇以及如何指定传输协议
    第一节:.Net版基于WebSocket的聊天室样例
    Maven常用dependency记录
    Linux学习笔记
    Maven 学习笔记
    SQL脚本去重分组统计
    版本号定义
    C# Random循环生成随机数重复问题解决方案
    C#通过Oracle.ManagedDataAccess无法访问Oralce
    Java注解的使用,类似于C#的Attribute
  • 原文地址:https://www.cnblogs.com/ithubb/p/14701561.html
Copyright © 2020-2023  润新知