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.