跳到主要内容

状态拷贝 API

Aworker 提供了用户代码状态保存和恢复的用户代码 API,应用于 Warmfork 场景与 Startup Snapshot 场景。

Warmfork

当 Aworker 以 --mode=seed-userland 指令启动时:

$ aworker --mode=seed-userland [options] <script-filepath>

用户代码可以观测到 'serialize' 事件。在 'serialize' 事件的 ExtendableEvent 终结时, 会在所有异步任务处理完成后进入 forkwait 状态。

在 fork 子进程中,用户代码可以观测到 'deserialize' 事件。在 'deserialize' 事件的 ExtendableEvent 终结时,会开始进入正常启动流程,执行 'install' 事件等等。

Startup Snapshot

当 Aworker 以 --build-snapshot 指令启动时:

$ aworker --build-snapshot --snapshot-blob snapshot.blob code.js

用户代码可以观测到 'serialize' 事件。在 'serialize' 事件的 ExtendableEvent 终结时, 会在所有异步任务处理完成后开始生成 Startup Snapshot 到指定的文件。

在生成了 Startup Snapshot 文件后,Aworker 即可通过 --snapshot-blob 指令从 Startup Snapshot 中恢复进程状态并开始执行用户代码:

$ aworker --snapshot-blob snapshot.blob

在这个阶段中,Worker 实例从 Startup Snapshot 中完成状态恢复后,用户代码可以观测到 'deserialized' 事件。 在 'deserialize' 事件的 ExtendableEvent 终结时,会开始进入正常启动流程,执行 'install' 事件等等。

在状态恢复阶段中的 'deserialize' 等等事件的处理器都是在生成 Startup Snapshot 时使用的用户代码中注册的。

Event: 'serialize'

参数:

表示 Worker 实例准备进行状态保存操作,如 forkwait 模式、Startup Snapshot 序列化模式等。

addEventListener('serialize', event => {
// Reset states that are correlated to the environment.
event.waitUntil(Promise.resolve());
});

Event: 'deserialize'

参数:

表示 Worker 实例准备进行状态恢复操作,如 forkwait 模式中的子进程、Startup Snapshot 反序列化完成等。

addEventListener('deserialize', event => {
// Restore states that are correlated to the environment.
event.waitUntil(Promise.resolve());
});