Documentation ¶
Index ¶
- Constants
- Variables
- type ClientConfig
- type GRPCServer
- func (gs *GRPCServer) Address() string
- func (gs *GRPCServer) Listener() net.Listener
- func (gs *GRPCServer) MutualTLSRequired() bool
- func (gs *GRPCServer) Server() *grpc.Server
- func (gs *GRPCServer) ServerCertificate() tls.Certificate
- func (gs *GRPCServer) SetClientRootCAs(clientRoots [][]byte) error
- func (gs *GRPCServer) SetServerCertificate(cert tls.Certificate)
- func (gs *GRPCServer) Start() error
- func (gs *GRPCServer) Stop()
- func (gs *GRPCServer) TLSEnabled() bool
- type KeepaliveOptions
- type SecureOptions
- type ServerConfig
- type ServerStatsHandler
- func (ssh *ServerStatsHandler) HandleConn(ctx context.Context, s stats.ConnStats)
- func (ssh *ServerStatsHandler) HandleRPC(ctx context.Context, s stats.RPCStats)
- func (ssh *ServerStatsHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context
- func (ssh *ServerStatsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context
Constants ¶
View Source
const ( DefaultMaxRecvMsgSize = 100 * 1024 * 1024 DefaultMaxSendMsgSize = 100 * 1024 * 1024 DefaultConnectionTimeout = 5 * time.Second )
Variables ¶
View Source
var ( ErrClientHandshakeNotImplemented = errors.New("pkg/comm: client handshake are not implemented with serverCreds") ErrServerHandshakeNotImplemented = errors.New("pkg/comm: server handshake are not implemented with clientCreds") ErrOverrideHostnameNotSupported = errors.New("pkg/comm: OverrideServerName is not supported") )
View Source
var ( DefaultKeepaliveOptions = KeepaliveOptions{ ClientPingServerInterval: time.Minute, ClientPingServerTimeout: 20 * time.Second, ServerPingClientInterval: 2 * time.Hour, ServerPingClientTimeout: 20 * time.Second, ClientPingServerMinInterval: time.Minute, } )
View Source
var ( DefaultTLSCipherSuites = []uint16{ tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, } )
Functions ¶
This section is empty.
Types ¶
type ClientConfig ¶
type ClientConfig struct { // 创建 TLS 连接时用到的选项 SecureOptions SecureOptions // 保持连接活跃的选项,包括: // Client: // - 客户端向服务端发送 ping 的时间间隔 // - 客户端等待服务端回应 ping 的超时时间 // - 允许客户端向服务端发送 ping 的最短时间间隔 // Server: // - 服务端向客户端发送 ping 的时间间隔 // - 服务端等待客户端回应 ping 的超时时间 KeepaliveOptions KeepaliveOptions // 客户端与服务端建立连接的超时等待时间 DialTimeout time.Duration // 以非阻塞的形式创建连接 AsyncConnect bool // 客户端允许接收的消息最大大小 MaxRecvMsgSize int // 客户端允许发送的消息最大大小 MaxSendMsgSize int }
func (ClientConfig) Dial ¶
func (cc ClientConfig) Dial(address string) (*grpc.ClientConn, error)
func (ClientConfig) GetGRPCDialOptions ¶
func (cc ClientConfig) GetGRPCDialOptions() ([]grpc.DialOption, error)
type GRPCServer ¶
type GRPCServer struct {
// contains filtered or unexported fields
}
func NewGRPCServer ¶
func NewGRPCServer(address string, serverConfig ServerConfig) (*GRPCServer, error)
func NewGRPCServerFromListener ¶
func NewGRPCServerFromListener(listener net.Listener, serverConfig ServerConfig) (*GRPCServer, error)
func (*GRPCServer) Address ¶
func (gs *GRPCServer) Address() string
func (*GRPCServer) Listener ¶
func (gs *GRPCServer) Listener() net.Listener
func (*GRPCServer) MutualTLSRequired ¶
func (gs *GRPCServer) MutualTLSRequired() bool
MutualTLSRequired 是否需要验证客户端身份。
func (*GRPCServer) Server ¶
func (gs *GRPCServer) Server() *grpc.Server
func (*GRPCServer) ServerCertificate ¶
func (gs *GRPCServer) ServerCertificate() tls.Certificate
ServerCertificate 返回服务端的身份证书。
func (*GRPCServer) SetClientRootCAs ¶
func (gs *GRPCServer) SetClientRootCAs(clientRoots [][]byte) error
SetClientRootCAs 设置验证客户端身份的 CA 证书。
func (*GRPCServer) SetServerCertificate ¶
func (gs *GRPCServer) SetServerCertificate(cert tls.Certificate)
func (*GRPCServer) Start ¶
func (gs *GRPCServer) Start() error
func (*GRPCServer) Stop ¶
func (gs *GRPCServer) Stop()
func (*GRPCServer) TLSEnabled ¶
func (gs *GRPCServer) TLSEnabled() bool
TLSEnabled 只是返回 GRPCServer 的 TLS 配置是否不为空。
type KeepaliveOptions ¶
type KeepaliveOptions struct { // ClientPingServerInterval 客户端在看不到服务端的活动时,为了检查服务端的状态,ping 服务端的时间间隔。 ClientPingServerInterval time.Duration // ClientPingServerTimeout 客户端 ping 服务端后,等待的超时时间,如果在该时间段内没有收到服务端的回复,则会关闭连接。 ClientPingServerTimeout time.Duration // ServerPingClientInterval 服务端在看不到客户端的活动时,为了检查客户端的状态,ping 客户端的时间间隔。 ServerPingClientInterval time.Duration // ServerPingClientTimeout 服务端 ping 客户端后,等待的超时时间,如果在该时间段内没有收到客户端的回复,则会关闭连接。 ServerPingClientTimeout time.Duration // ClientPingServerMinInterval 允许客户端 ping 服务端的最短时间间隔,时间间隔太短的话,客户端会 ping 的过于频繁,那么服务端可以关闭与客户端的连接。 ClientPingServerMinInterval time.Duration }
func (*KeepaliveOptions) ToGRPCDialOptions ¶
func (ko *KeepaliveOptions) ToGRPCDialOptions() []grpc.DialOption
ToGRPCDialOptions 导出 grpc 连接中,客户端给服务端拨号时的选项:
- 客户端 ping 服务端的时间间隔:ClientPingServerInterval
- 客户端 ping 服务端后等待的超时时间:ClientPingServerTimeout
- 当 grpc 的连接上没有活动流时,客户端依然会给服务端发送 ping
func (*KeepaliveOptions) ToGRPCServerOptions ¶
func (ko *KeepaliveOptions) ToGRPCServerOptions() []grpc.ServerOption
ToGRPCServerOptions 导出 grpc 连接中服务端的选项:
- 服务端 ping 客户端的时间间隔:ServerPingClientInterval
- 服务端 ping 客户端后等待的超时时间:ServerPingClientTimeout
- 服务端允许客户端 ping 自己的最短时间间隔:ClientPingServerMinInterval
- 当 grpc 的连接上没有活动流时,服务端依然允许客户端 ping 自己
type SecureOptions ¶
type SecureOptions struct { // 建立握手连接时,验证客户端或服务端的证书。 VerifyCertificate func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error // ASN.1 DER PEM 编码的 x509 证书。 PublicKeyPEM []byte // ASN.1 DER PEM 编码的密钥,用于 TLS 通信。 PrivateKeyPEM []byte // ASN.1 DER PEM 编码的证书,客户端用它来验证服务端的身份。 ServerRootCAs [][]byte // ASN.1 DER PEM 编码的证书,服务端用它来验证客户端的身份。 ClientRootCAs [][]byte // 是否使用 TLS 用于通信。 UseTLS bool // 在进行身份验证的时候,是否需要客户端提供证书,如果服务端要验证客户端的身份,则该字段必须置为 true。 RequireClientCert bool // TLS 支持的密码套件。 CipherSuites []uint16 // TODO 为什么要有时间偏移? TimeShift time.Duration // 用于验证返回证书上的主机名,除非给出 InsecureSkipVerify。除非是 IP 地址,否则它也会被包含在客户端的握手过程中,以支持虚拟主机。 ServerNameOverride string }
func (*SecureOptions) ClientCertificate ¶
func (so *SecureOptions) ClientCertificate() (tls.Certificate, error)
ClientCertificate 根据 PEM 编码的 x509 公钥和私钥,生成一个 TLS 证书。
func (SecureOptions) ToTLSConfig ¶
func (so SecureOptions) ToTLSConfig() (*tls.Config, error)
ToTLSConfig 根据 SecureOptions 解析得到 *tls.Config:
&tls.Config{ MinVersion: tls.VersionTLS12 ServerName: so.ServerNameOverride VerifyPeerCertificate: so.VerifyCertificate RootCAs: AppendCertsFromPEM(so.ServerRootCAs[i]) // 如果提供了验证服务端身份的 CA 证书的话 Certificates: append(Certificates, tls.X509KeyPair(so.PublicKeyPEM, so.PrivateKeyPEM)) // 需要客户端证书的情况下 Time: time.Now().Add((-1) * so.TimeShift) }
type ServerConfig ¶
type ServerConfig struct { ConnectionTimeout time.Duration SecureOptions SecureOptions KeepaliveOptions KeepaliveOptions StreamInterceptors []grpc.StreamServerInterceptor UnaryInterceptors []grpc.UnaryServerInterceptor Logger *hlogging.HyperchainLogger HealthCheckEnabled bool ServerStatsHandler *ServerStatsHandler MaxRecvMsgSize int MaxSendMsgSize int }
type ServerStatsHandler ¶
type ServerStatsHandler struct { OpenedConnCounter metrics.Counter ClosedConnCounter metrics.Counter }
func NewServerStatsHandler ¶
func NewServerStatsHandler(p metrics.Provider) *ServerStatsHandler
func (*ServerStatsHandler) HandleConn ¶
func (ssh *ServerStatsHandler) HandleConn(ctx context.Context, s stats.ConnStats)
HandleConn 处理 Conn 统计信息。统计建立起的连接数量和连接关闭的数量。
func (*ServerStatsHandler) HandleRPC ¶
func (ssh *ServerStatsHandler) HandleRPC(ctx context.Context, s stats.RPCStats)
HandleRPC 处理 RPC 统计信息。(这里并没有实现该方法)
func (*ServerStatsHandler) TagConn ¶
func (ssh *ServerStatsHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context
TagConn 可以为给定的上下文附加一些信息。返回的上下文将用于统计处理。对于连接统计处理,HandleConn 中用于此连接的上下文将从返回的上下文中导出。对于 RPC 统计处理:
- 在服务器端,用于此连接上所有 RPC 的 HandleRPC 中的上下文将从返回的上下文中导出。
- 在客户端,上下文不是从返回的上下文派生的。
(这里并没有实现该方法)
func (*ServerStatsHandler) TagRPC ¶
func (ssh *ServerStatsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context
TagRPC 可以为给定的上下文附加一些信息。在 RPC 的其余生命周期中使用的上下文将来自返回的上下文。(这里并没有实现该方法)
Click to show internal directories.
Click to hide internal directories.