init
This commit is contained in:
117
config.go
Normal file
117
config.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package reconnect
|
||||
|
||||
import "time"
|
||||
|
||||
// StrategyType 定义重连策略类型
|
||||
type StrategyType string
|
||||
|
||||
const (
|
||||
// StrategyExponentialBackoff 指数退避策略
|
||||
StrategyExponentialBackoff StrategyType = "exponential"
|
||||
// StrategyFixedInterval 固定间隔策略
|
||||
StrategyFixedInterval StrategyType = "fixed"
|
||||
// StrategyLinearBackoff 线性退避策略
|
||||
StrategyLinearBackoff StrategyType = "linear"
|
||||
)
|
||||
|
||||
// ConnectionState 连接状态
|
||||
type ConnectionState int
|
||||
|
||||
const (
|
||||
// StateDisconnected 断开连接
|
||||
StateDisconnected ConnectionState = iota
|
||||
// StateConnecting 正在连接
|
||||
StateConnecting
|
||||
// StateConnected 已连接
|
||||
StateConnected
|
||||
// StateReconnecting 正在重连
|
||||
StateReconnecting
|
||||
)
|
||||
|
||||
func (s ConnectionState) String() string {
|
||||
switch s {
|
||||
case StateDisconnected:
|
||||
return "disconnected"
|
||||
case StateConnecting:
|
||||
return "connecting"
|
||||
case StateConnected:
|
||||
return "connected"
|
||||
case StateReconnecting:
|
||||
return "reconnecting"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
// Config 重连配置
|
||||
type Config struct {
|
||||
// Strategy 重连策略类型
|
||||
Strategy StrategyType
|
||||
|
||||
// MaxRetries 最大重试次数,-1 表示无限重试
|
||||
MaxRetries int
|
||||
|
||||
// InitialDelay 初始延迟时间
|
||||
InitialDelay time.Duration
|
||||
|
||||
// MaxDelay 最大延迟时间
|
||||
MaxDelay time.Duration
|
||||
|
||||
// Multiplier 指数退避乘数(仅用于指数退避策略)
|
||||
Multiplier float64
|
||||
|
||||
// LinearIncrement 线性增量(仅用于线性退避策略)
|
||||
LinearIncrement time.Duration
|
||||
|
||||
// HealthCheckInterval 健康检查间隔
|
||||
HealthCheckInterval time.Duration
|
||||
|
||||
// HealthCheckTimeout 健康检查超时时间
|
||||
HealthCheckTimeout time.Duration
|
||||
|
||||
// OnStateChange 状态变化回调函数
|
||||
OnStateChange func(oldState, newState ConnectionState)
|
||||
|
||||
// OnReconnect 重连回调函数(重连成功时调用)
|
||||
OnReconnect func(attempt int)
|
||||
|
||||
// OnError 错误回调函数
|
||||
OnError func(err error)
|
||||
}
|
||||
|
||||
// DefaultConfig 返回默认配置
|
||||
func DefaultConfig() Config {
|
||||
return Config{
|
||||
Strategy: StrategyExponentialBackoff,
|
||||
MaxRetries: -1, // 无限重试
|
||||
InitialDelay: 1 * time.Second,
|
||||
MaxDelay: 30 * time.Second,
|
||||
Multiplier: 2.0,
|
||||
LinearIncrement: 1 * time.Second,
|
||||
HealthCheckInterval: 10 * time.Second,
|
||||
HealthCheckTimeout: 5 * time.Second,
|
||||
}
|
||||
}
|
||||
|
||||
// Validate 验证配置
|
||||
func (c *Config) Validate() {
|
||||
if c.InitialDelay <= 0 {
|
||||
c.InitialDelay = 1 * time.Second
|
||||
}
|
||||
if c.MaxDelay <= 0 {
|
||||
c.MaxDelay = 30 * time.Second
|
||||
}
|
||||
if c.Multiplier <= 0 {
|
||||
c.Multiplier = 2.0
|
||||
}
|
||||
if c.LinearIncrement <= 0 {
|
||||
c.LinearIncrement = 1 * time.Second
|
||||
}
|
||||
if c.HealthCheckInterval <= 0 {
|
||||
c.HealthCheckInterval = 10 * time.Second
|
||||
}
|
||||
if c.HealthCheckTimeout <= 0 {
|
||||
c.HealthCheckTimeout = 5 * time.Second
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user