该模块定义了一个维护网络连接状态的有限状态机(FSM,finite-state machine)。这个有限状态机不维护连接本身,只维护连接的状态。
- Reconnect 定义了五种连接状态,分别是:
Void
、Listening
、Backoff
、ConnectInProgress
、Active
、Idle
、Reconnect
。每个状态都有如下属性:
name
:该状态的名称is_connected
:该状态中是否进行的了网络连接deadline
:该状态的失效时间run
:FSM 的下一步动作
Void
状态是该 FSM 刚实例化的状态,这个状态只会在这时出现一次。- 刚实例化完的 FSM 需要调用
enable
方法,来转换到Backoff
状态 Listening
:表示 FSM 处于监听状态,passive 为 TrueConnectInProgress
:表示 FSM 处于正在尝试连接的状态Active
:表示 FSM 已经处于连接状态
初始化很多的属性
name
:该对象的名称state
:状态state_entered
:进入当前状态的时间max_tries
:最大的尝试次数info_level
:日志的记录水平n_attempted_connections
:尝试连接的次数n_successful_connections
:成功连接的次数total_connected_duration
:总共的链接成功的时间(每次连接成功都会累加)last_connected
:最近一次连接成功的时间last_activity
:最近一次进入 active 状态的时间last_disconnected
:最近一次断开连接的时间creation_time
:该Reconnect
对象创建的时间backoff
:距离下一次连接或者监听的间隔时间min_backoff
:距离下一次连接或者监听的最小间隔时间max_backoff
:距离下一次连接或者监听的最大间隔时间probe_interval
passive
:passive
为 True 时,FSM 会进行监听等待连接的到来。passive
为 False 时,会主动连接远程的 server。seqno
设置该对象的名称
使能该 reconnect
是否可以再次尝试
FSM 进行状态的转换
FSM 下一步要采取的动作
是否是 passive 模式
将 FSM 转向 Listening
状态
将 FSM 转向 ConnectInProgress
状态
将 FSM 转向 Active
状态
将 FSM 转向 Active
状态
根据 FSM 当前状态的 deadline 判断是否超时
根据 FSM 当前的状态,判断网络是否已经连接
计算上次连接到现在的间隔时间
计算上次断开连接到现在的间隔时间
返回当前 FSM 的状态信息
若是 quiet 为真,则 log 的记录级别将设为 debug
若是 quiet 为假,则 log 的记录级别将设为 info
判断该 FSM 是否已经执行过 enable 方法。也就是当前状态不再为 Void
将 FSM 转换到 Void
状态
将 FSM 转换到 Reconnect
状态
若 FSM 扔允许转换,则将 FSM 转换到 Backoff
状态,否则转换到 Void
状态。
监听失败时被调用。当 FSM 状态处于 Listening
时,会调用 disconnected
方法将 FSM 转换到 Backoff
状态,否则转换到 Void
状态。
连接失败时被调用。状态先转换到 ConnectInProgress
再转换到 Backoff
或者 Void
状态。