Go gRPC

常亮

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

SupportPackageIsVersion变量是从生成的协议缓冲文件中引用的,以确保与所使用的gRPC版本兼容。 最新的支持包版本是5。

旧版本保持兼容性。 如果兼容性不能保持,可能会被删除。

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

const PickFirstBalancerName = "pick_first"

PickFirstBalancerName是pick_first平衡器的名称。

const Version = "1.9.0-dev"

Version是当前grpc版本

变量

var (
    // ErrClientConnClosing表示该操作是非法的,因为ClientConn正在关闭。
    ErrClientConnClosing = errors.New("grpc: the client connection is closing")
    // ErrClientConnTimeout表示ClientConn无法在指定的超时时间内建立底层连接。 DEPRECATED:请使用context.DeadlineExceeded代替。
    ErrClientConnTimeout = errors.New("grpc: timed out when dialing")
)
var DefaultBackoffConfig = BackoffConfig{
    MaxDelay:  120 * time.Second,
    baseDelay: 1.0 * time.Second,
    factor:    1.6,
    jitter:    0.2,
}

DefaultBackoffConfig使用在backoff中指定的值 https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md

var EnableTracing bool

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

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

func Code

func Code(err error) codes.Code

如果rpc系统生成err,Code会返回err的错误代码。 否则,它将返回codes.Unknown。

不推荐使用:改用status.FromError和Code方法。

func ErrorDesc

func ErrorDesc(err error) string

如果rpc系统产生err,ErrorDesc就返回err的错误描述.否则,当err为nil时,它返回err.Error()或空字符串

不推荐使用:改用status.FromError和Message方法.

func Errorf

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

Errorf返回一个包含错误代码和描述的error; 如果c是OK,Errorf返回nil。

不推荐使用:改用status.Errorf。

func Invoke

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

调用发生在线路上的rpc request,并在收到response后返回。这通常由生成的代码调用.

不建议使用:改用ClientConn.Invoke。

func MethodFromServerStream

func MethodFromServerStream(stream ServerStream) (string, bool)

MethodFromServerStream返回输入流的方法字符串。 返回的字符串格式为“/service/method”。

func NewLBBuilderWithFallbackTimeout

func NewLBBuilderWithFallbackTimeout(fallbackTimeout time.Duration) balancer.Builder

NewLBBuilderWithFallbackTimeout使用给定的fallbackTimeout创建一个grpclb builder。 如果在fallbackTimeout内没有收到来自远程balancer的响应,将使用已解析地址列表中的后端地址。

只有在需要非默认回退超时时调用此函数。

func SendHeader

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

SendHeader发送标题元数据。 最多可以调用一次。 由SetHeader()设置的提供的md和头文件将被发送。

func SetHeader

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

SetHeader设置header metadata。 多次调用时,所有提供的metadata将被合并。 发生以下情况时,所有metadata将被发送出去:

- grpc.SendHeader() is called;
- The first response is sent out;
- An RPC status is sent out (error or success).

func SetTrailer

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

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

type Address

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

Address代表客户端连接的服务器信息。 这是实验API,将来可能会改变或扩展。

type BackoffConfig

type BackoffConfig struct {
    // MaxDelay是补偿延迟的上限。
    MaxDelay time.Duration
    // 包含过滤或未导出的字段
}

BackoffConfig定义默认gRPC补偿策略的参数。

type Balancer

type Balancer interface {
    // 开始执行初始化工作来引导Balancer。 例如,此功能可能会启动名称解析并观察更新。 拨号时会被呼叫。
    Start(target string, config BalancerConfig) error
    // 向上通知Blancer,grpc与服务器有个基于addr地址的链接.一旦addr上的连接丢失或关闭,它就返回down
    // TODO: It is not clear how to construct and take advantage of the meaningful error
    // parameter for down. Need realistic demands to guide.
    Up(addr Address) (down func(error))
    // 获取与ctx对应的rpc的服务器地址
    // i) 如果它返回一个连接的地址,gRPC内部发送连接到这个地址的RPC;
    // ii)如果它返回正在建立连接的地址(由Notify(...)发起)但未连接,grpc内部会:
    //  * RPC失败: 如果RPC快速失败并且连接处于TransientFailure或Shutdown状态;
    //  * 发出RPC:在连接上
    // iii) 如果它返回一个不存在连接的地址,grpc内部会将其视为失败,并将使相应的rpc失败
    //
    // 因此,在编译自定义banlance时,推荐以下规则.如果opts.BlockingWait为true,则应该返回连接的地址或
    // 块(如果没有连接的地址).它应该考虑阻塞时ctx的超时或取.如果opts.BlockingWait为false(对于快速失败
    // 的RPC),它应该立即返回它通过Notify(...)通知的地址而不是阻塞
    //
    // 该函数返回一旦rpc完成或失败时调用的put。 put可以收集并向远程负载平衡器报告RPC状态。
    //
    //这个函数应该只返回错误,Balancer不能自行恢复。如果返回错误,RPC内部将会使RPC失败。
    Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error)
    // Notify 返回grpc内部使用的channel,观察grpc需要连接的地址.这些地址可能来自name resolver或者远程
    // 负载均衡器.grpc内部将把它与内部现有的连接地址进行比较.如果通知返回的address balancer不在现有的
    // 连接地址中,则grpc开始连接地址.如果现有连接得之中的地址不在通知列表中,则相应的连接将正常关闭.否则,
    // 不会有任何操作.请注意,地址片必须是应该连接的地址的完整列表.
    Notify() <-chan []Address
    // 关闭balancer
    Close() error
}

Balancer为RPC选择网络地址。 这是实验API,将来可能会改变或扩展。

func RoundRobin

func RoundRobin(r naming.Resolver) Balancer

RoundRobin返回一个轮训选择地址的Balancer。 它使用r来观察名称解析更新并相应地更新可用的地址。

func BalancerConfig

type BalancerConfig struct {
    // DialCreds 是Balancer实现用来拨号远程负载均衡服务器的传输证书
    // 如果不需要安全地与另一方通话,那么Balancer的实现可以忽略它。
    DialCreds credentials.TransportCredentials
    // Dialer 是Balancer实现可以用来拨号到远程负载平衡器服务器的自定义拨号程序。
    // 如果不需要与远程平衡器进行通信,则平衡器实现可以忽略这一点。
    Dialer func(context.Context, string) (net.Conn, error)
}

BalancerConfig指定了Balancer的配置。

type BalancerGetOptions

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

BalancerGetOptions配置一个Get调用。 这是实验API,将来可能会改变或扩展。

type CallOption

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

CallOption在启动之前配置呼叫,或者在呼叫完成后从呼叫中提取信息。

func FailFast

func FailFast(failFast bool) CallOption

FailFast配置在终端的连接或无法访问的服务器上尝试RPC时要执行的操作.如果failFast为true,rpc将立即失败,否则,rpc客户端将阻塞呼叫,直到连接可用或呼叫被取消或超时),并且如果由于瞬时错误而失败,则将重试呼叫.除非服务器指示数据不处理,grpc将不会重试.请参考https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md

默认情况下,rpc是"Fail Fast"

func Header

func Header(md *metadata.MD) CallOption

Header返回一个CallOptions,它检索一个unary RPC的Header Metadata。

func MaxCallRecvMsgSize

func MaxCallRecvMsgSize(s int) CallOption

MaxCallRecvMsgSize返回一个CallOption,它设置客户端可以接收的最大消息大小。

func MaxCallSendMsgSiz

func MaxCallSendMsgSize(s int) CallOption

MaxCallSendMsgSize返回一个CallOption,它设置客户端最大可发送消息的大小

func Peer

func Peer(peer *peer.Peer) CallOption

Peer返回一个CallOption,它检索一个unary rpc的对等信号.

func PerRPCCredentinals

func PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption

PerRPCCredentials返回一个CallOption,为一次调用设置credentials.PerRPCCredentials。

func Trailer

func Trailer(md *metadata.MD) CallOption

Trailer返回一个CallOptions,它检索一个一元RPC的尾部元数据。

func UseCompressor

func UseCompressor(name string) CallOption

UseCompressor返回一个CallOption,它设置发送请求时使用的Compressor(压缩器)。 如果Compressor也设置,UseCompressor具有更高的优先级。 这个API是实验性的。

type ClientConn

type ClientConn struct {
    // contains filtered or unexported fields
}

ClientConn表示到RPC服务器的客户端连接。

func Dial

func Dial(target string, opts ...DialOption) (*ClientConn, error)

Dial(拨号器)创建到给定目标的客户端连接。

func DialContext

func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error)

DialContext创建给定目标的客户连接. 可以使用ctx取消或终止挂起的链接.一旦这个函数返回,ctx的取消和到期将是空操作.次函数返回后,用户应调用ClientConn.Close来终止所有挂起的操作

func (*ClientConn)Close

func (cc *ClientConn) Close() error

关闭ClientConn和所有底层连接

func (*ClientConn)GetMethodConfig

func (cc *ClientConn) GetMethodConfig(method string) MethodConfig

GetMethodConfig获取输入方法的配置方法。 如果输入方法(即/service/method)完全匹配,则返回相应的MethodConfig。 如果输入方法没有完全匹配,则查找服务下的默认配置(即/service/)。 如果服务有一个默认的MethodConfig,我们返回它。 否则,我们返回一个空的MethodConfig。

func (*ClientConn)GetState

func (cc *ClientConn) GetState() connectivity.State

GetState返回ClientConn的连接状态。 这是一个实验性的API。

func (*ClientConn)Invoke

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

Invoker发送在线上的RPC request,并在收到response后返回.这通常由生成的代码调用。

func (*ClientConn)NewStream

func (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error)

NewStream为客户端创建一个新的Stream。 这通常由生成的代码调用。

func (*ClientConn)WaitForStateChange

func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool

WaitForStateChange等待连接。ClientConn的状态从sourceState或ctx更改过期。 在前一种情况下返回一个真值,在后者中返回假。 这是一个实验性的API。

type ClientStream

type ClientStream interface {
    // 如果有数据Header会返回头部元数据
    // 如果元数据还没有准备好读取,它将被阻塞.
    Header() (metadata.MD, error)
    // 如果有数据,Trailer返回来自服务器的尾部元数据
    // 它只能在stream.CloseAndRecv返回之后调用,否则stream.Recv返回一个非nil error(包括io.EOF)
    Trailer() metadata.MD
    // CloseSend关闭流的发送指引。 当㓟非nil错误时,它关闭流。
    CloseSend() error
    // 当发送请求发生错误时,Stream.SendMsg()可能会返回非nil错误。 返回的错误表示当前发送的状态,而不
    // 是RPC的最终状态。
    // 如果你关心RPC的状态,一般调用Stream.RecvMsg()来获得最终状态
    Stream
}

ClientStream定义了客户端流必须满足的接口。

func NewClientStream

func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error)

NewClientStream为客户端创建一个新的Stream。 这通常由生成的代码调用。

DEPRECATED:改用ClientConn.NewStream。

type Codes

type Codec interface {
    // Marshal returns the wire format of v.
    Marshal(v interface{}) ([]byte, error)
    // Unmarshal parses the wire format into v.
    Unmarshal(data []byte, v interface{}) error
    // String returns the name of the Codec implementation. The returned
    // string will be used as part of content type in transmission.
    String() string
}

Codec定义了gRPC用于编码和解码消息的接口。 请注意,此接口的实现必须是线程安全的; 编解码器的方法可以从并发的goroutines中调用。

type Compressor

type Compressor interface {
    // 把p压缩成w
    Do(w io.Writer, p []byte) error
    //Type返回Compressor使用的压缩算法。
    Type() string
}

Compressor定义了gRPC用来压缩消息的接口。

func NewGZIPCompressor

func NewGZIPCompressor() Compressor

NewGZIPCompressor创建一个基于GZIP的压缩器。

type Decompressor

type Decompressor interface {
    // 从r读取数据并解压缩它们。
    Do(r io.Reader) ([]byte, error)
    // Type返回Decompressor使用的压缩算法。
    Type() string
}

Decompressor定义gRPC用于解压缩消息的接口。

func NewGZIPDecompressor

func NewGZIPDecompressor() Decompressor

NewGZIPDecompressor在GZIP的基础上创建一个解压缩器.

type DialOption

type DialOption func(*dialOptions)

DialOption配置我们如何建立连接

func FailOnNonTempDialError

func FailOnNonTempDialError(f bool) DialOption

FailOnNonTempDialError返回一个DialOption,用于指定gRPC是否因non-temporary dial错误而失败。如果f为true,并且dialer返回非临时性错误,则grpc的网络地址的连接将失败,并且不会尝试重新连接.FailOnNonTempDialError的默认值是false。 这是一个实验性的API。

func WithAuthority

func WithAuthority(a string) DialOption

WithAuthority返回一个DialOption,它指定要用作:authority伪标题的值。 此值仅适用于WithInsecure,如果存在TransportCredentials,则不起作用。

func WithBackoffConfig

func WithBackoffConfig(b BackoffConfig) DialOption

WithBackoffConfig配置dialer在连接失败后使用提供的补偿参数。

使用WithBackoffMaxDelay,直到BackoffConfig上的更多参数打开使用。

func WithBackoffMasDelay

func WithBackoffMaxDelay(md time.Duration) DialOption

WithBackoffMaxDelay配置拨号程序在失败连接尝试后补偿时使用提供的最大延迟。

func WithBalancer

func WithBalancer(b Balancer) DialOption

WithBalancer返回一个DialOption,它用v1 API设置一个负载均衡器。 如果指定了DialOption,名称解析器将被忽略。

弃用:在balancer package和WithBalancerName中使用新的Balancer API。

func WithBalancerName

func WithBalancerName(balancerName string) DialOption

WithBalancerName设置ClientConn将被初始化的balancer。 使用balancerName注册的balancer。 如果没有balancer被balancerName注册,这个函数会发生混乱。

balancer不能被service config指定的balancer选项覆盖。

这是一个实验性的API。

func WithBlock

func WithBlock() DialOption

WithBlock返回一个DialOption,它使dial block的调用者,直到底层连接启动。 没有这个,dial立即返回,连接服务器发生在后台。

func WithCodes

func WithCodec(c Codec) DialOption

WithCodec返回一个DialOption,它为消息的编解码设置一个编解码器。

fun WithCompressor

func WithCompressor(cp Compressor) DialOption

WithCompressor返回一个DialOption,它设置一个Compressor用于消息压缩。 它的优先级比UseCompressor CallOption设置的压缩器低。

弃用:改用UseCompressor。

func WithDecompressor

func WithDecompressor(dc Decompressor) DialOption

WithDecompressor返回一个DialOption,它设置一个Decompressor用于传入的消息解压缩。 如果传入的响应消息使用解压缩程序的Type()进行编码,则将使用它。 否则,将使用消息编码来查找通过encoding.RegisterCompressor注册的压缩器,然后将其用于解压缩消息。 如果没有压缩器注册编码,则会返回未实现状态错误。

弃用:改为使用encoding.RegisterCompressor。

func WithDefaultCallOptions

func WithDefaultCallOptions(cos ...CallOption) DialOption

WithDefaultCallOptions返回一个DialOption,它为连接上的调用设置默认的CallOptions。

func WithDialer

func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption

WithDialer返回一个DialOption,它指定一个用于拨号网络地址的函数。 如果FailOnNonTempDialError()设置为true,并且f返回error,gRPC将检查error的Temporary()方法,以决定是否应该尝试重新连接到网络地址。

func WithInitialConnWindowSize

func WithInitialConnWindowSize(s int32) DialOption

WithInitialConnWindowSize返回一个DialOption,它设置连接上初始窗口大小的值。 窗口大小的下限是64K,小于这个值的任何值都将被忽略。

func WithInitialWindowZise

func WithInitialWindowSize(s int32) DialOption

WithInitialWindowSize返回一个DialOption,它设置流上初始窗口大小的值。 窗口大小的下限是64K,小于这个值的任何值都将被忽略。

func WithInsecure

func WithInsecure() DialOption

WithInsecure返回一个DialOption,为此ClientConn禁用传输安全性。 请注意,除非设置了“WithInsecure”,否则需要传输安全性。

func WithKeepaliveParams

func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption

WithKeepaliveParams返回一个DialOption,它为客户端传输指定keepalive参数。

func WithMaxMsgSize

func WithMaxMsgSize(s int) DialOption

WithMaxMsgSize返回一个DialOption,它设置客户端可以接收的最大消息大小。 弃用:改用WithDefaultCallOptions(MaxCallRecvMsgSize(s))。

func WithPerRPCCredentials

func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption

WithPerRPCCredentials返回一个DialOption,它设置凭证并在每个出站RPC上放置auth状态。

func WithReadBufferSize

func WithReadBufferSize(s int) DialOption

WithResolverUserOptions返回一个DialOption,它设置了解析器的BuildOption的UserOptions字段。

func WithServiceConfig

func WithServiceConfig(c <-chan ServiceConfig) DialOption

WithServiceConfig返回一个DialOption,它有一个读取服务配置的通道。 DEPRECATED:服务配置应通过名称解析器接收,如在此处指定。https://github.com/grpc/grpc/blob/master/doc/service_config.md

func WithStatsHandler

func WithStatsHandler(h stats.Handler) DialOption

WithStatsHandler返回一个DialOption,它为此ClientConn中的所有RPC和底层网络连接指state handler。

func WithStreamInerceptor

func WithStreamInterceptor(f StreamClientInterceptor) DialOption

WithStreamInterceptor返回一个DialOption,指定用于流式RPC的拦截器。

func WithTimeout

func WithTimeout(d time.Duration) DialOption

WithTimeout返回一个DialOption,用于配置最初拨打ClientConn的超时时间。 当且仅当WithBlock()存在时有效。 弃用:改为使用DialContext和context.WithTimeout。

func WithTransportCredentials

func WithTransportCredentials(creds credentials.TransportCredentials) DialOption

WithTransportCredentials返回一个DialOption,用于配置连接级别的安全证书(例如TLS / SSL)。

func WithUnaryInterceptor

func WithUnaryInterceptor(f UnaryClientInterceptor) DialOption

WithUnterInterceptor返回一个DialOption,它指定unary RPC的拦截器。

func WithUserAgent

func WithUserAgent(s string) DialOption

WithUserAgent返回一个DialOption,它指定所有RPC的用户代理字符串。

func WithWaitForHandsShake

func WithWaitForHandshake() DialOption

在将RPC分配给连接之前,使用WaitForHandshake块直到从服务器接收到初始设置帧。 实验API。

func WithWriteBufferSize

func WithWriteBufferSize(s int) DialOption

WithWriteBufferSize允许您设置写入缓冲区的大小,这决定了在写入数据之前可以批量处理多少数据。

type EmptyCallOption

type EmptyCallOption struct{}

EmptyCallOption不会改变呼叫配置。 它可以嵌入到另一个结构中,以携带拦截器使用的卫星数据。

type MethodConfig

type MethodConfig struct {
    // WaitForReady指示发送到此方法的RPC是否应该等待连接准备就绪(!failfast)。 通过gRPC客户端API指定
    //的值将覆盖此处设置的值。
    WaitForReady *bool
    // Timeout是发送给此方法的PRC的默认超时值.使用的实际deadline是此处制定的值得最小值以及应用
    //程序通过grpc客户端api设置的值。如果其中一个没有设置,那么另一个将被设置.如果都没有设置,那么prc没
    //有deadline
    Timeout *time.Duration
    // MaxReqSize是流(CLIENT - >Server)中单个请求所允许的最大有效负载大小(以字节为单位)。
    // 测量的大小是每个消息在压缩之后(但在stream压缩之前)的以字节为单位的序列化payload。
    //实际使用的值是此处指定的值的最小值和应用程序通过gRPC客户端API设置的值。 如果其中一个没有设置,
    //那么另一个将被使用。 如果两者均未设置,则使用内置的默认值。
    MaxReqSize *int
    // MaxRespSize是流(server - >client)中单个响应的最大允许有效负载大小(以字节为单位)。
    MaxRespSize *int
}

MethodConfig定义了服务提供者为特定方法推荐的配置。 DEPRECATED:用户不应该使用这个结构。 服务配置应通过名称解析器接收,如https://github.com/grpc/grpc/blob/master/doc/service_config.md

type MethodDesc

type MethodDesc struct {
    MethodName string
    Handler    methodHandler
}

MethodDesc表示RPC服务的方法规范。

type MethodInfo

type MethodInfo struct {
    // Name is the method name only, without the service name or package name.
    Name string
    // IsClientStream indicates whether the RPC is a client streaming RPC.
    IsClientStream bool
    // IsServerStream indicates whether the RPC is a server streaming RPC.
    IsServerStream bool
}

MethodInfo包含RPC的信息,包括其方法名称和类型。

type Server

type Server struct {
    // contains filtered or unexported fields
}

Server是提供RPC请求的gRPC服务器。

func NewServer

func NewServer(opt ...ServerOption) *Server

NewServer创建一个没有注册服务的gRPC server,并且还没有开始接受请求。

func (*Server)GetServiceInfo

func (s *Server) GetServiceInfo() map[string]ServiceInfo

GetServiceInfo从service name返回一个map到ServiceInfo。 service name包含package名称,格式为.

func (*Server) GracefulStop

func (s *Server) GracefulStop()

GracefulStop优雅地停止gRPC服务器。 它会阻止服务器接受新的连接和RPC,并阻止所有挂起的RPC完成。

func (*Server) RegisterService

func (s *Server) RegisterService(sd *ServiceDesc, ss interface{})

RegisterService将服务及其实现注册到gRPC服务器。 它是从IDL生成的代码中调用的。 这必须在调用Serve之前调用。

func (*Server) Serve

func (s *Server) Serve(lis net.Listener) error

Serve接受Listener上的传入的连接,为每个服务器创建一个新的ServerTransport和服务配置。 service goroutine读取gRPC请求,然后调用注册的handler来回复它们。 当传入的参数lis.Accept fail(致命错误)时Server会返回。当此方法返回时,lis将被关闭。 Serve将返回一个非nil错误,除非Stop或GracefulStop被调用。

func (*Server)ServerHTTP

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP通过在gRPC server中查找所请求的gRPC方法来响应gRPC请求r来实现Go标准库的http.Handler接口。

提供的HTTP请求必须已经到达HTTP/2连接。 使用Go标准库的Server时,实际上意味着请求也必须通过TLS到达。

要在gRPC和现有的http.Handler之间共享一个端口(例如https的443),请使用root http.Handler,例如:

if r.ProtoMajor == 2 && strings.HasPrefix(
    r.Header.Get("Content-Type"), "application/grpc") {
    grpcServer.ServeHTTP(w, r)
} else {
    yourMux.ServeHTTP(w, r)
}

注意ServeHTTP使用Go的HTTP/2 server实现,它与grpc-go的HTTP/2 server完全分离。 两种路径的性能和功能可能有所不同。 ServeHTTP不支持通过grpc-go的HTTP/2 server提供的一些gRPC功能,目前它是实验性的,可能会有变化。

func (*Server)Stop

func (s *Server) Stop()

Stop停止gRPC服务器。 它立即关闭所有打开的连接和监听器。 它将取消服务器端的所有活动RPC,并且客户端上相应的挂起RPC将通过连接错误得到通知。

type ServerOption

type ServerOption func(*options)

ServerOption设置诸如凭证,编解码器和keepalive参数等选项。

func ConnectionTimeout

func ConnectionTimeout(d time.Duration) ServerOption

ConnectionTimeout返回一个ServerOption,为所有新的连接设置连接建立的超时(直到并包括HTTP/2握手)。 如果没有设置,默认值是120秒。 零或负值将导致立即超时。

这个API是实验性的。

func Creds

func Creds(c credentials.TransportCredentials) ServerOption

Creds返回一个为服务器连接设置凭据的ServerOption。

func CustomCodec

func CustomCodec(codec Codec) ServerOption

CustomCodec返回一个ServerOption,它为消息编解码设置一个编解码器。

func InTapHandle

func InTapHandle(h tap.ServerInHandle) ServerOption

InTapHandle返回一个ServerOption,它设置所有要创建的服务器传输的tap handler。 只能安装一个。

func InitialConnWindowSize

func InitialConnWindowSize(s int32) ServerOption

InitialConnWindowSize返回一个为连接设置窗口大小的ServerOption。 窗口大小的下限是64K,小于这个值的任何值都将被忽略。

func InitialWindowSize

func InitialWindowSize(s int32) ServerOption

InitialWindowSize返回一个ServerOption,它设置流的窗口大小。 窗口大小的下限是64K,小于这个值的任何值都将被忽略。

func KeepaliveEnforcementPolicy

func KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption

KeepaliveEnforcementPolicy返回一个ServerOption,为Server设置Keepalive执行策略。

func KeepaliveParams

func KeepaliveParams(kp keepalive.ServerParameters) ServerOption

KeepaliveParams返回一个ServerOption,为服务器设置keepalive和max-age参数。

func MaxConcurrentStreams

func MaxConcurrentStreams(n uint32) ServerOption

func MaxMsgSize

func MaxMsgSize(m int) ServerOption

MaxMsgSize返回ServerOption以设置服务器可以接收的最大消息大小(以字节为单位)。 如果没有设置,gRPC使用默认限制。 弃用:改用MaxRecvMsgSize。

func MaxRecvMsgSize

func MaxRecvMsgSize(m int) ServerOption

MaxRecvMsgSize返回ServerOption来设置服务器可以接收的最大消息大小(以字节为单位)。 如果没有设置,gRPC使用默认的4MB。

func MaxSendMsgSize

func MaxSendMsgSize(m int) ServerOption

MaxSendMsgSize返回ServerOption来设置服务器可以发送的最大消息大小(以字节为单位)。 如果没有设置,gRPC使用默认的4MB。

fun RPCCompressor

func RPCCompressor(cp Compressor) ServerOption

RPCCompressor返回一个ServerOption,它设置出站消息的Compressor。为了向后兼容,无论传入的消息压缩如何,所有出站消息都将用此Compressor发送.默认情况下,server 消息将使用发送request消息相同的Compressor

弃用:改为使用encoding.RegisterCompressor。

func RPCDecompressor

func RPCDecompressor(dc Decompressor) ServerOption

RPCDecompressor返回一个ServerOption,为入站消息设置一个解压缩器。 它比通过encoding.RegisterCompressor注册的解压缩程序具有更高的优先级。

弃用:改为使用encoding.RegisterCompressor。

func ReadBufferSiz

func ReadBufferSize(s int) ServerOption

ReadBufferSize允许您设置读取缓冲区的大小,这决定了一个读取系统调用最多可以读取多少数据。

func StatsHandler

func StatsHandler(h stats.Handler) ServerOption

StatsHandler返回一个ServerOption,它为服务器设置stats handler。

func StreamInterceptor

func StreamInterceptor(i StreamServerInterceptor) ServerOption

StreamInterceptor返回一个ServerOption,它为服务器设置StreamServerInterceptor。 只能安装一个流拦截器。

func UnaryInterceptor

func UnaryInterceptor(i UnaryServerInterceptor) ServerOption

UnaryInterceptor返回一个ServerOption,为服务器设置UnaryServerInterceptor。 只能安装一个unary拦截器。 可以在调用者处实现多个拦截器(例如链接)的构建。

func UnknownServiceHandler

func UnknownServiceHandler(streamHandler StreamHandler) ServerOption

UnKnownServiceHandler返回一个ServerOption,允许添加一个自定义的未知服务处理器.所提供的方法是一个双向流RPC service handler,只要接收到未注册的服务或方法的请求,就会被调用,而不是"UnImplements"grpc错误. handler可以完全访问请求的上线和Stream,以及调用可以绕过拦截器。

func WriteBufferSize

func WriteBufferSize(s int) ServerOption

WriteBufferSize允许您设置写入缓冲区的大小,这决定了在写入数据之前可以批量处理多少数据。

type ServerStream

type ServerStream interface {
    // SetHeader设置header metadata. 它可能被多次调用.
    // 当多次调用时,所有提供的metadata将被合并.
    //发生以下情况时,所有metadata将被发送出去:
    //  - ServerStream.SendHeader()被调用;
    //  - 第一个RESPONSE被发送出去;
    //  - 一个RPC状态被发送出去(error or success).
    SetHeader(metadata.MD) error
    // SendHeader 发送header metadata.
    // 参数提供的md和SetHeader()设置的head matadata🏆发送
    // 多次调用时会失败
    SendHeader(metadata.MD) error
    // SetTrailer设置随RPC状态一起发送的trail metadata。
    // 当多次调用时,所有提供的metadata将被合并
    SetTrailer(metadata.MD)
    Stream
}

type ServiceConfig

type ServiceConfig struct {
    // LB是服务提供商推荐的load balancer。 通过grpc.WithBalancer指定的balancer将覆盖此。
    LB  *string
    // Methods 包含此服务中方法的map.如果map中的方法(即/service/method)完全匹配,则使用相应的
    // MethodConfig。如果没有完全匹配,请查找服务的默认配置(/service/),如果存在,则使用相应的
    // MethodConfig;否则,该方法没有MethodConfig可以使用.
    Methods map[string]MethodConfig
}

ServiceConfig由服务提供者提供,并包含有关连接到服务的客户端如何表现的参数。 DEPRECATED:用户不应该使用这个结构体。 服务配置应通过name resolver接收,如https://github.com/grpc/grpc/blob/master/doc/service_config.md

type ServiceDesc

type ServiceDesc struct {
    ServiceName string
    // 指向服务接口的指针。 用于检查用户提供的实现是否满足接口要求。
    HandlerType interface{}
    Methods     []MethodDesc
    Streams     []StreamDesc
    Metadata    interface{}
}

ServiceDesc表示RPC服务的规范。

type ServiceInfo

type ServiceInfo struct {
    Methods []MethodInfo
    // Metadata 是在注册服务时在ServiceDesc中指定的metadata
    Metadata interface{}
}

ServiceInfo包含unary RPC方法信息,stream RPC method信息和service的metadata.

type Stream

type Stream interface {
    // Context 返回stream的上下文
    Context() context.Context
    // SendMsg是阻塞的,直到它发送m,stream完成或中断.发送error时,它会中断stream,
    // 并返回客户端上的RPC状态.在服务端,它只是将error返回给调用者.sendMsg由生成的代码调用
    // 当用户真正需要的时候,用户可以直接调用SendMsg。有一个调用SendMsg的goroutine和另一个goroutine同
    // 时在一个stream上调用recvMsg是安全的。但是在不同的goroutine中的同一个stream上调用SendMsg是
    // 不安全的。
    SendMsg(m interface{}) error
    // RecvMsg是阻塞的,直到收到消息或stream完成.在客户端,当stream完成时返回io.EOF.
    // 发生任何其他error时,它终端stream并返回一个RPC状态.在服务端,它只是将错误返回给调用者.
    RecvMsg(m interface{}) error
}

Stream定义客户端或服务器流必须满足的通用接口。

type StreamClientInterceptor

type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error)

StreamClientInterceptor拦截ClientStream的创建。 它可能会返回一个自定义的ClientStream来拦截所有的I/O操作。 streamer是创建ClientStream的处理器,拦截器负责调用它。 这是一个实验性的API。

type StreamDesc

type StreamDesc struct {
    StreamName string
    Handler    StreamHandler

    // At least one of these is true.
    ServerStreams bool
    ClientStreams bool
}

StreamDesc表示流式RPC服务的方法规范。

type StreamHandler

type StreamHandler func(srv interface{}, stream ServerStream) error

StreamHandler定义gRPC服务器调用的处理程序来完成stream RPC的执行。

type StreamServerInfo

type StreamServerInfo struct {
    // FullMethod is the full RPC method string, i.e., /package.service/method.
    FullMethod string
    // IsClientStream indicates whether the RPC is a client streaming RPC.
    IsClientStream bool
    // IsServerStream indicates whether the RPC is a server streaming RPC.
    IsServerStream bool
}

StreamServerInfo包含有关服务器端的流式RPC的各种信息。 所有per-rpc信息都可能被拦截器突变。

type StreamServerInterceptor

type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error

StreamServerInterceptor提供了一个钩子来拦截服务器上流式RPC的执行。 info包含拦截器可以操作的这个RPC的所有信息。 处理程序是服务方法的实现。 拦截器负责调用处理程序来完成RPC。

type Stream

type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error)

Stream Client被Stream ClientInterceptor调用来创建一个ClientStream。

type UnaryClientInterceptor

type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error

UnaryClientInterceptor拦截客户端上unary RPC的执行。 invoker是完成RPC的处理程序,拦截器负责调用它。 这是一个实验性的API。

type UnaryHandler

type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error)

UnaryHandler定义由UnaryServerInterceptor调用的处理程序来完成unary RPC的正常执行。

type UnaryInoker

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

UnaryClientInterceptor调用UnaryInvoker来完成RPC。

type UnaryServerInfo

type UnaryServerInfo struct {
    // Server是用户提供的服务实现。 这是只读的。
    Server interface{}
    // FullMethod is the full RPC method string, i.e., /package.service/method.
    FullMethod string
}

UnaryServerInfo由关于服务器端的unary RPC的各种信息组成。 所有per-rpc信息都可能被拦截器突变。

type UnaryServerInterceptor

type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error)

UnaryServerInterceptor提供了一个拦截服务器上unary RPC执行的钩子。 info包含拦截器可以操作的这个RPC的所有信息。 处理程序是服务方法实现的包装。 拦截器负责调用处理程序来完成RPC。

Copyright © www.gitbook.com/@vitzhou 2016 all right reserved,powered by Gitbook该文件修订时间: 2018-02-07 08:06:40

results matching ""

    No results matching ""