自动重连
为应对 WebSocket 等实时通信中发生的连接中断,本功能提供自动重连机制。它基于一定的逻辑进行重连,并发出成功和失败事件。
autoReconnect
函数创建一个 AutoReconnect
类实例,使您可以使用重连功能。
导入
import { autoReconnect } from "@tai-kun/surrealdb";
语法
function autoReconnect( db: Client, options?: AutoReconnectOptions): AutoReconnect;
参数
db
Surreal
类的实例对象。
options
指定重连设置的选项。您可以指定重连间隔、最大延迟时间和重连条件等。如果使用默认设置,则可以省略。
backoffLimit?: number
- 指定尝试重连的最大次数。默认值为
Infinity
。 initialDelay?: number
- 第一次尝试重连之前的延迟时间(毫秒)。默认值为
500
。 maxDelay?: number
- 重连延迟时间(毫秒)的最大值。随着回退的进行,延迟会增加,但此值为上限。默认值为
30_000
(30 秒)。 shouldReconnect?: { ping?: { threshold: number; perMillis: number }} | (error) => boolean
- 指定进行重连的条件。如果指定为函数,则根据错误事件的参数判断是否执行重连。
返回值
返回 AutoReconnect
类的实例。此实例可用于控制重连、获取状态和监视事件。
.getReconnectionInfo(): ReconnectionInfo
- 获取当前的重连信息(
.state
和.phase
)。它们分别表示以下含义: .state
:"waiting"
… 初始状态。尚未进行任何重连尝试。"running"
… 正在重连。"success"
… 重连成功。"failure"
… 重连失败。
.phase
:"waiting"
… 初始状态。尚未进行任何重连尝试。"pending"
… 已请求重连,正在等待一段时间后执行。"disconnecting"
… 正在断开连接。"connecting"
… 正在连接。即使断开连接失败,也会尝试连接。"succeeded"
… 重连成功。"failed"
… 重连失败。
state | phase |
---|---|
"waiting" | "waiting"|"pending" |
"running" | "disconnecting"|"connecting" |
"success" | "pending"|"succeeded" |
"failure" | "pending"|"failed" |
.enable(): void
- 启用重连功能。调用此方法后,将执行重连。默认情况下已启用。
.disable(): void
- 禁用重连功能。调用此方法后,将禁用重连。
.reset(): void
- 重置重连计数器。这将初始化重连的回退逻辑。
.enabled: boolean
- 表示重连功能是否启用的布尔值。如果为
true
,则重连已启用。
例子
import { autoReconnect, Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();const ar = autoReconnect(db, { initialDelay: 1000, maxDelay: 30000, backoffLimit: 5, shouldReconnect: { ping: { perMillis: 60000, // 1 分钟内, threshold: 3, // 3 次以上 ping 失败后,重连。 }, },});
ar.on("pending", (endpoint, duration) => { console.log(`${duration / 1000} 秒后将连接到 ${endpoint}...`);});
ar.on("success", (endpoint) => { console.log(`已成功连接到 ${endpoint} 🎉`);});
ar.on("failure", (endpoint, cause) => { console.error(`连接到 ${endpoint} 失败了 🤯`); console.error("原因:", cause);});
try { await db.connect("ws://127.0.0.1:8000");
// 长时间运行的各种处理
} finally { await db.disconnect();}
注意
- 重连逻辑对于调整 WebSocket 连接的稳定性和连接恢复频率至关重要。应根据系统要求和用例调整选项设置。
autoReconnect
用于尝试恢复连接丢失的情况,但不能保证在所有情况下都能完全恢复。