Transport 基类
AutoStoreSyncTransportBase 是所有传输器的基类,定义了传输层的连接生命周期、receiver 机制、事件系统与心跳检测。自定义传输器时继承此基类,详见自定义开发。
架构职责
Syncer ──send(operate)──► Transport ──信道──► 对端 Transport ──receiver──► 对端 SyncerTransport不理解store,只负责传递StateRemoteOperate消息Syncer通过addReceiver(id, callback)注册回调,由Transport在收到消息时分发
配置选项
typescript
interface AutoStoreSyncTransportOptions {
/** 启用调试模式,接收到每一条消息时触发 operate 事件 */
debug?: boolean;
/** 是否自动建立连接,默认 false(保持向后兼容) */
autoConnect?: boolean;
/** 心跳间隔(毫秒),启用后自动进行 ping/pong 检测 */
heartbeat?: number;
}连接生命周期
typescript
const transport = new LocalTransport(() => peerTransport);
transport.connect(); // 建立连接,触发 connect 事件
// ...
transport.disconnect(); // 断开连接,触发 disconnect 事件connect()会调用子类的onConnect()钩子;支持Promise异步连接(如WebSocket)connected属性标识当前连接状态connect事件使用 retain(保留)机制:晚注册的监听器也能收到已触发的connect事件
子类需要实现的钩子:
| 钩子 | 说明 |
|---|---|
onConnect() | 建立连接,返回 boolean 或 Promise |
onDisconnect() | 销毁连接 |
onSendOperate() | 发送操作到对端 |
收到消息时子类必须调用 this.onReceiveOperate(operate),由基类完成心跳应答、消息校验与 receiver 分发。
Receiver 机制
Syncer 通过 receiver 接收远程操作:
typescript
// 注册:返回带 off() 的订阅对象
const subscriber = transport.addReceiver("my-syncer-id", (operate) => {
console.log("收到操作:", operate.type, operate.path);
});
// 移除
subscriber.off();
// 或
transport.removeReceiver("my-syncer-id");一个 Transport 可以注册多个 receiver(按 id 区分),每条消息会分发给所有 receiver,由它们自行决定是否处理。1-N 场景(如 AutoStoreBroadcastSyncer)即基于此机制。
loading
上面的演示通过继承 AutoStoreSyncTransportBase 实现自定义传输器,自动获得了事件系统与 receiver 分发能力——Syncer 侧代码与使用内置传输器时完全一致。
心跳检测
配置 heartbeat 选项后自动启用:
typescript
const transport = new WorkerTransport({
worker: port,
heartbeat: 3000, // 3 秒心跳间隔
});- 每个心跳间隔发送一条
$ping消息 - 对端收到
$ping自动回复$pong - 超时未收到
$pong则自动disconnect()并触发timeout事件
详见心跳检测。
loading
上面的演示完整展示了基类内置的心跳能力:无需子类编写任何心跳代码,仅配置 heartbeat 选项后,$ping/$pong 的发送、应答与超时断开全部由 AutoStoreSyncTransportBase 自动完成。
事件
| 事件 | 说明 |
|---|---|
connect | 连接建立时触发(retain 保留) |
disconnect | 连接断开时触发 |
operate | 接收到消息时触发(需开启 debug) |
error | 发生错误时触发 |
timeout | 心跳超时,连接可能已断开 |
API
| 成员 | 说明 |
|---|---|
connect() | 建立连接 |
disconnect() | 断开连接 |
send(operate) | 发送操作(未连接时抛出错误) |
addReceiver(id, callback) | 注册 receiver,返回订阅对象 |
removeReceiver(id) | 移除 receiver |
connected | 当前连接状态 |
id | 传输器自增唯一标识(用于 flags 标记) |
heartbeat | 心跳检测器实例(启用时存在) |
startHeartbeat() / stopHeartbeat() | 手动控制心跳检测 |