package grpc

grpc包实现了一个称为gRPC的RPC系统。关于gRPC的更多详细访问 grpc.io

Constants

const (
    SupportPackageIsVersion3 = true
    SupportPackageIsVersion4 = true
    SupportPackageIsVersion5 = true
)

从生成的protocol buffer文件中引用SupportPackageIsVersion变量,以确保与所使用的gRPC版本兼容。最新的支持包版本为5。

保留较旧的版本是为了兼容性.。如果无法保持兼容性,则可以将其删除。

这些常量不应从任何其他代码中引用。

const PickFirstBalancerName = "pick_first"

PickFirstBalancerNamepick_first负载均衡器的名字。

const Version = "1.26.0-dev"

Version是当前gRPC版本。

Variables

var DefaultBackoffConfig = BackoffConfig{
    MaxDelay: 120 * time.Second,
}

DefaultBackoffConfig使用本文中的内容backoff指定值。

弃用,改用ConnectParams代替。在整个1.x系列中都会支持它。

var EnableTracing bool

EnableTracing控制是否使用golang.org/x/net/trace包跟踪RPC。仅应在此程序发送或接收任何RPC之前设置此项。

var (
    // ErrClientConnClosing 表示此操作是非法的,因为ClientConn正在被关闭
    //
    // 弃用: 用户不应该依赖此错误,使用Cancled状态码代替它
    ErrClientConnClosing = status.Error(codes.Canceled, "grpc: the client connection is closing")
)
var ErrClientConnTimeout = errors.New("grpc: timed out when dialing")

ErrClientConnTimeout表示ClientConn无法在指定的时间内建立底层连接。

弃用:grpc永远不会返回此错误,用户不应该引用它。

var ErrServerStopped = errors.New("grpc: the server has been stopped")

ErrServerStopped表示此操作现在是非法的,因为服务器被停止了。

func Code

func Code(err error) codes.Code

如果错误是由rpc系统产生的,那么Code返回错误代码,否则返回codes.Unknown

弃用:使用status.Code代替。

func ErrorDesc

func ErrorDesc(err error) string

如果错误是有rpc系统产生的,那么ErrorDesc返回错误的描述信息,否则返回err.Error(),当err为nil的时候返回空字符串。

弃用:使用status.Convert和Method方法代替它。

func Errorf

func Errorf(c codes.Code, format string, a ...interface{}) error

Errorf返回错误其中包含错误代码和描述信息,如果c的值是ok,那么返回nil。

弃用:使用status.Errorf代替。

func Invoke

func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error

Invoke在线路上发送RPC请求,并在接收到响应后返回,这通常由生成的代码调用。

弃用:使用ClientConn.Invoke代替它。

func Method

func Method(ctx context.Context) (string, bool)

Metthod返回服务端上下文中method字符串,返回的字符串格式为"/service/method"。

func MethodFromServerStream

func MethodFromServerStream(stream ServerStream) (string, bool)

MethodFromServerStream返回输入流的method字符串,返回的字符串格式为"/service/method"。

func NewContextWithServerTransportStream

func NewContextWithServerTransportStream(ctx context.Context, stream ServerTransportStream) context.Context

NewContextWithServerTransportStream 从ctx创建一个新的上下文并将流附加到该上下文。此API是实验性的。

func SendHeader

func SendHeader(ctx context.Context, md metadata.MD) error

SendHeader发送标头元数据,做多只能调用一次,将发送由SetHeader()设置的提供的md和headers。

func SetHeader

func SetHeader(ctx context.Context, md metadata.MD) error

SetHeader设置标头元数据,当多次调用的时候,所有提供的元数据将会被合并。发生以下情况之一,将发送所有元数据:

  • grpc.SendHeader()被调用
  • 第一个响应被发送出去
  • RPC状态被发送(错误或成功)

func SetTrailer

func SetTrailer(ctx context.Context, md metadata.MD) error

SetTrailer设置在RPC返回时将发送的trailer元数据,当多次调用时,所有提供的元数据将会被合并。

type Address

type Address struct {
    // Addr是建立连接的服务器地址
    Addr string
    // 元数据是与Addr相关的信息,用于做负载均衡决策
    Metadata interface{}
}

Address代表客户端连接到的服务器。

弃用:使用balancer包

type BackoffConfig

type BackoffConfig struct {
    // MaxDelay 是 backoff 延迟的上界
    MaxDelay time.Duration
}

BackoffConfig定义缺省gRPCbackoff策略的参数。

弃用:使用ConnectParams代替,在1.x系列中都会支持。

type Balancer

type Balancer interface {
    // 负责启动balancer的初始化工作。
    //  例如,它可以启动名称解析并观察更新。它将会在dial时调用。
    Start(target string, config BalancerConfig) error
    // 通知balancergRPC已经在addr地址连接到服务器。
    // 一旦与addr的连接关闭或者丢失将会返回down。
    // TODO: 目前还不清楚如何构造和利用down的有意义的错误参数,
    // 需要现实的需求来指导。
    Up(addr Address) (down func(error))
    // 获取与 ctx 对应的 RPC 的服务器地址。
    // i) 如果它返回一个连接的地址,gRPC内部会在这个连接上发出到这个地址的RPC。
    // ii) 如果它返回一个正在构建(有Notify(...)启动)但是还没有连接的地址,
    //  如果gRPC处于fail-fast连接处于TransientFailure或关闭的状态 ,那么gRPC内部构建失败,
    //  否则将在这个连接上发送RPC。
    // iii) 如果它返回一个连接不存在的地址,gRPC内部将任务是一个错误,
    // 并且将使响应的RPC失败。

    // 因此,在编写自定义balancer时,推荐使用以下规则。
    //  如果ops.BlockingWait是true,它应该返回一个已经连接的地址或块(如果没有已连接的地址)
    //  在阻塞时,它应该尊重ctx的超时或取消。
    //  如果opts.BlockingWait是false(对于fail-fast的RPC),
    // 它应该立即返回一个由Notify(...)通知的地址而不是块。

    // 函数返回put,这个函数在rpc完成或者失败后被调用。
    // put可以收集RPC统计数据并将其报告给远程负载均衡器。
    //
    // 这个函数应该只返回错误的balancer而不能恢复它。
    // 如果返回错误,gRPC 内部将使 RPC 失败。
    Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error)
    // 通知返回一个通道,gRPC内部使用该通道来监视gRPC需要连接的地址。
    // 这些地址可能来自名称解析器或远程负载平衡器。
    //  gRPC内部会将其与现有的连接地址进行比较。
    //  如果平衡器通知的地址不在现有的连接地址中,则gRPC将开始连接该地址。
    // 如果现有连接地址中的地址不在通知列表中,则相应的连接会正常关闭。
    // 否则,将不执行任何操作。 请注意,地址片必须是应连接的地址的完整列表。
    // 它不是delta.
    Notify() <-chan []Address
    // 关闭 balancer
    Close() error
}

balancer为 rpc 选择网络地址。

弃用:使用balancer包,可能会在未来的1.x 版本中被删除。

func RoundRobin

func RoundRobin(r naming.Resolver) Balancer

RoundRobin返回一个Balancer,它选择地址循环,它使用r监视名称解析更新并相应更新可用的地址。

弃用:使用balancer/doundrobin,可能在将来的1.x版本中删除。

type BalancerConfig

type BalancerConfig struct {
    // DialCreds是Balancer实施可用于拨号到远程负载均衡器服务器的传输凭据。
    // 如果Balancer实现不需要安全地与另一方通话,则可以忽略此设置。
    DialCreds credentials.TransportCredentials
    // Dialer是Balancer实现可用于拨打到远程负载均衡器服务器的自定义拨号器。
    // Balancer实现如果不需要与远程平衡器通信,可以忽略此操作。
    Dialer func(context.Context, string) (net.Conn, error)
}

BalancerConfig指定Balancer的配置。

弃用:使用balancer包,可能在将来的1.x版本中删除。

type BalancerGetOptions

type BalancerGetOptions struct {
    //   Blockingwait 指定当没有连接地址时 Get 是否应该阻塞。
    BlockingWait bool
}

Balancergetutions 配置 Get 调用。

弃用:使用balancer包,可能在将来的1.x版本中删除。

type CallOption

type CallOption interface {
    // contains filtered or unexported methods
}

CallOption在调用开始前配置它,或在完成之后从调用中提取信息。

func CallContentSubtype

func CallContentSubtype(contentSubtype string) CallOption

Callcontentsubtype 返回一个 CallOption,该 CallOption 将为调用设置 content-subtype。 例如,如果 content-subtype 是“ json” ,那么连接上的 Content-Type 将是application / grpc + json。 Content-type 中包含内容子类型之前,会将其转换为小写形式。更多细节请参见这里

如果不使用 ForceCodec,那么将使用 content-subtype 在 RegisterCodec 控制的注册表中查找要使用的 Codec。 有关注册的详细信息,请参阅 RegisterCodec 上的文档。 内容子类型的查找不区分大小写。 如果没有找到这样的编解码器,调用将导致代码错误。

如果还使用了 ForceCodec,那么该 Codec 将用于所有请求和响应消息,对于请求,其内容子类型设置为给定的 contentSubtype。

func CallCustomCodec

func CallCustomCodec(codec Codec) CallOption

Callcustomcodec 的行为类似于 ForceCodec,但是接受 grpc.Codec 而不是 encoding.Codec

弃用: 使用 ForceCodec代替它。

func FailFast

func FailFast(failFast bool) CallOption

FailFast 是 WaitForReady 的反义词。

弃用:使用WaitForReady

func ForceCodec

func ForceCodec(codec encoding.Codec) CallOption

Forcecodec 返回一个 CallOption,它将设置给定的 Codec 用于调用的所有请求和响应消息。 调用 String ()的结果将以不区分大小写的方式用作 content-subtype。

更多关于Content-Type的细节看这里。有关 Codec 和 content-subtype 之间交互的更多细节,请参阅 RegisterCodec 和 CallContentSubtype 的文档。

这个函数是为高级用户提供的; 更喜欢只使用 CallContentSubtype 来选择已注册的编解码器。

这是一个实验性的 API。

func Header

func Header(md *metadata.MD) CallOption

Header 返回一个 CallOptions,用于检索普通 RPC 的 Header 元数据。

func MaxCallRecvMsgSize

func MaxCallRecvMsgSize(s int) CallOption
上次修改: 14 April 2020