Cloudflare Workers 宿主库
持久恢复。豫 封装 SQLite Durable Object 的当前书签、按时间取书签、设置下次会话恢复书签,以及由豫言显式调用的对象重启。Wrangler 4.129.0 本地 workerd 能返回当前书签,但按时间取书签和设置恢复均报告后端未实现 PITR;安全入口把错误返回豫言。没有在本地或云端执行实际恢复。生产 PITR 会影响整个对象的 SQL 与 KV 内容,适用范围和 30 日窗口见 Cloudflare SQLite 存储文档;逐项证据见 持久恢复接口.清单.tsv。
持久命名空间。豫 现覆盖授权 Durable Object 命名空间的命名 ID、唯一 ID、字符串还原、ID 比较、按名或按 ID 取桩,以及辖区子空间。Wrangler 4.129.0 本地 workerd 已验证 ID 往返、三种桩的豫言对象请求、locationHint 参数接受,以及对象内 ctx.id.name 对命名 ID 有值、对唯一 ID 为 null;它明确不实现辖区限制,辖区子空间及辖区唯一 ID 的安全入口均返回失败与原错误。真实辖区和地理位置效果需云端验收,详 持久命名空间接口.清单.tsv 与 Cloudflare 命名空间文档。
网络。豫 现可直接读取 Response 的状态、标头句柄和可空的 body 流句柄;无论 Response 来自原生 fetch 还是现有的 云工服务请求句柄,豫言均可再用 流。豫 逐块取原始字节、编码。豫 增量解码。Wrangler 4.129.0 本地 workerd 已验原生 Response 的状态 206、Content-Type、204 空正文和拆成两块的“豫”字节;真实远端长流仍待验。广播。豫 为同一 Durable Object 实例提供具名原始字节频道:豫言创建订阅流、发布原字、关闭频道,并自行决定 SSE 或其他事件格式。两个并发订阅读者已从另一请求收到豫言生成的进度事件,频道关闭后均正常结束。频道为实例内临时状态;事件持久化与重放仍由业务豫言负责,详 网络中断接口.清单.tsv、广播接口.清单.tsv。
时钟。豫 新增 performance.now() 与 performance.timeOrigin 的原始十进制文本接口,以及一次定时、周期定时、取消和等待定时事件。定时器属于单次 Worker 调用:宿主把到期事件交给豫言决定后续行为,并在调用结束时清理未完成的定时器。Wrangler 4.129.0 本地 workerd 已验证零原点、一次事件、两次周期事件、取消和等待超时。生产环境中时钟只在 I/O 后推进,且定时器只能在请求上下文使用,见 时钟接口.清单.tsv 和 Cloudflare 性能与定时文档。
流式编码。豫 提供 TextEncoderStream、TextDecoderStream 的构造、属性和读写端句柄;流。豫 新增文字写器及安全文字读取入口。Wrangler 4.129.0 本地 workerd 已验证“甲”“乙”两段写入生成六字节 UTF-8、拆开的汉字和 BOM 被正确组合;坏 UTF-8 在严格模式返回 TypeError,非严格模式产出替换字符。云端待验。详 流式编码接口.清单.tsv、Encoding 标准与 Cloudflare Web 标准接口。
网络。豫 的可取消请求先返回在途 Promise 句柄,豫言可中止其 AbortSignal,再调用 云工请求候回应安全 取得 Response 句柄或错误;云工回应文字安全 读取有 2 MiB 上限的正文。本地 workerd 已验证本机 HTTP 200、在途 AbortError、预先中止的自定理由和无效等待句柄;云端待验。详 网络中断接口.清单.tsv 与 Cloudflare Request 文档。
中断。豫 让豫言创建 AbortController、取得信号、传入文字或对象理由、检查 throwIfAborted(),并使用 AbortSignal.abort()、any()、timeout() 及异步等待 abort 事件。本地 workerd 已验证上述行为;4.129.0 对 timeout(-1) 创建随即中断的信号,与 Chrome 的 RangeError 不同。详 中断接口.清单.tsv 和 Cloudflare Web 标准接口。
网址。豫 提供返回成功标记与文本的 encodeURI、encodeURIComponent、decodeURI、decodeURIComponent;句柄。豫 的 云工调用全局安全 将同步异常和 Promise 拒绝转为错误 JSON。本地 workerd 已验证坏 %、非法 UTF-8 和无效 URL 的错误结果,详 网址编解码接口.清单.tsv 与 ECMAScript URI 函数。
句柄。豫 的 云工调用方法安全 与它同类,作用于句柄上的方法:同步异常和 Promise 拒绝不越过宿主桥抛出,而是返回成功标记与结果 JSON 或含 名称、消息 的错误 JSON。D1、R2 等绑定的错误原因只能由它读到;云工调用方法 遇到宿主异常时错误直接穿出 Wasm,豫言的「尝试运行」捕获不到。豫言操作系统的关系数据库适配以它把 D1 错误转成可捕获的豫言异常。
表单数据。豫 为豫言提供 FormData 字段修改、查询和有序枚举,文件项以句柄保留原字。Wrangler 4.129.0 本地 workerd 已验证 00 FF 41 经 Request multipart 往返;云端部署待验。详 表单数据接口.清单.tsv 与 Cloudflare Request 文档。
云工工作流步做可回滚 在平台 step.do 上登记回滚回调。平台调用该回调时,宿主启动新的豫言 Wasm,事件种类为 workflow-rollback;豫言可读取步骤名、输入、前向输出、步骤上下文和错误,再自行执行补偿逻辑。本地 workerd 已验证 terminate({rollback:true}) 后豫言写入 KV 标记。回滚回调返回后没有业务 JS 决策;多步骤逆序与失败重试仍待验。Cloudflare Workflows 回滚接口列出参数和调用方式。
工作流。豫 现另有 createBatch、deleteBatch 和 sleepUntil 封装;时钟。豫 的 云工当前Unix毫秒 可供豫言计算绝对期限。Wrangler 4.129.0 本地 workerd 已验两实例批量创建、逐项删除结果和一秒绝对休眠。重复 createBatch 未重跑实例,却仍返回原 ID 列表,与 Cloudflare Workflows Workers API 所述的“排除已有实例”不一致;本库保留平台原始返回值,差异记在 工作流接口.清单.tsv。Worker 生产计时器在无 I/O 时可能不前进,见 Performance and timers 与 时钟接口.清单.tsv。
工作流。豫 通过 WORKFLOW 许可创建实例、查询状态和发送事件;构建外壳导出 豫言工作流,其 run 和每个 step.do 回调均进入豫言 Wasm。豫言决定步骤名称、顺序、输入、配置及 JSON 输出,平台缓存成功步骤并管理等待。Wrangler 4.129.0 本地 workerd 已验证创建、步骤输出、waitForEvent、发送事件及使用 --persist-to 后停止并重启进程仍可恢复同一实例。当前尚未覆盖回滚、全部实例管理方法及非 JSON 步骤值;早期一次本地运行在实例完成后仍出现 workerd 请求挂起告警,需要继续定位。接口依据见 Cloudflare Workflows Workers API,逐项见 工作流接口.清单.tsv。
实例管理接口又在本地 workerd 以 工作流管理。测试。豫 验证:等待中的实例暂停后为 paused,恢复后为 running;实例完成后从指定豫言步骤重启并再次进入 running;另一实例终止后为 terminated,删除后按 ID 查询得到 instance.not_found。本地运行时在暂停附近打印引擎中断及请求挂起告警,尚未确认是模拟器诊断还是适配缺陷;云端和竞态边界不据此推断。
本地复验可用 工作流。测试。豫 构建 Worker,许可为 {"WORKFLOW":["TEST_WORKFLOW"]},Wrangler 配置的 workflows 项为 {"name":"yy-host-workflow-resume-test","binding":"TEST_WORKFLOW","class_name":"豫言工作流"},兼容日期 2026-09-10。在同一 --persist-to 目录运行 /create-wait2,确认 /status-wait2 为运行中;停止并重启 wrangler dev 后再次查询,调用 /send2,最终状态应为 complete 且 output.payload.答 为“豫言事件”。本地 Workflows 是平台模拟实现,不能据此证明云端故障恢复语义。
编码。豫 封装 Worker 的 TextEncoder、TextDecoder、流式解码和 encodeInto;调度。豫 封装 scheduler.wait 与 AbortSignal 取消。等待时长用十进制字符串传入,因此豫言可指定小数毫秒。Wrangler 4.129.0 本地 workerd 已以真实豫言 Wasm 验证正常和取消路径;取消结果返回 AbortError。云端定时器在没有 I/O 时的冻结行为尚未实测,语义见 Encoding与 Scheduler 文档;逐项状态见 编码调度接口.清单.tsv。
密仓。豫 使用独立的 SECRETS_STORE 许可调用账号级 Secrets Store 绑定的异步 get()。Wrangler 4.129.0 本地 Store 已用无敏假值通过真实 workerd 验收;假值只在豫言中比较,响应没有回显。生产 Secret、轮换、缺失值及错误语义仍待验。Secrets Store 与逐 Worker 的 SECRET 绑定不同,配置见 Cloudflare Secrets Store Workers 集成,逐项状态见 密仓接口.清单.tsv。
环境与版本。豫 以独立 ENV、SECRET、VERSION 许可读取文本、空字符串、JSON 变量、Secret 和版本元数据;分析。豫 以 ANALYTICS 许可写入 Analytics Engine 数据点。Wrangler 4.129.0 本地 workerd 已验这些绑定的读取或调用,Secret 只用无敏测试值且不输出。Analytics 的本地调用成功不证明云端持久化;限额与单索引要求见 Analytics Engine 文档,版本字段见 Version metadata 文档。逐项边界见 基础绑定接口.清单.tsv。
限流。豫 通过许可清单的 RATE_LIMIT 绑定名调用 Cloudflare Rate Limiting 的 limit({key})。Wrangler 4.129.0 本地 workerd 已验 1 次/10 秒配置下同键重复调用被拒绝、异键仍通过。生产环境的计数按地区且最终一致,不能把它当精确计费器;配置与语义见 Cloudflare Rate Limiting 文档,验收范围见 限流接口.清单.tsv。
密钥生命周期接口现支持生成可选导出性的 AES-GCM 密钥并导出原始字节,以及 PBKDF2、HKDF 的 deriveBits 和派生 AES-GCM 密钥。Wrangler 4.129.0 本地 workerd 已验证生成、导出、重新导入、PBKDF2/HKDF 派生结果与 AES 加解密互通。测试使用低迭代次数仅为验收,应用须根据自身安全要求选择参数。
密码。豫 提供随机 UUID、随机字节、摘要、AES-GCM 与 HMAC 的具名豫言接口。密钥留在宿主,通过句柄使用;AES-GCM 随机数须由调用方确保在同一密钥下不重复。Wrangler 4.129.0 本地 workerd 已验 SHA-256 对 abc 的摘要长度与首字节、AES-GCM 含附加认证数据的往返和 HMAC 正反验签。完整 Web Crypto 方法、Workers 扩展及其他算法仍待补,详 密码接口.清单.tsv;Workers 的算法差异见 Cloudflare Web Crypto 文档。
Dynamic Worker Loader 已有 云工动态加载、云工动态按号取、云工动态入口句柄、云工动态转发请求。许可清单按 LOADER 列绑定名。构建器生成 动态资源.mjs,内含固定宿主模块源码和值桥 Wasm 字节;豫言程序传入子程序 Wasm 字节、CPU 毫秒和子请求数,子 Worker 的 env 为空且 globalOutbound 为 null。相同 get 标识必须始终对应相同程序字节、限额和宿主源码。Wrangler 4.129.0 本地 workerd 已验 load 与重复 get 的 HTTP 200 响应。生产缓存、限额触发和网络隔离仍需验证;详见 动态工接口.清单.tsv。
本库使豫言 WasmGC 程序处理 Worker 请求。宿主.mjs 将请求交给豫言,并执行豫言明确调用的平台能力;路由、权限和业务状态由豫言决定。构建产物需包含外层 JS 与豫言 Wasm、值桥 Wasm。
调用 创建云工宿主({程序模块, 值桥模块, 许可, 动态资源}) 可取得 fetch、queue、scheduled 与 email 处理器;构建产物另导出通用 豫言持久对象 和 豫言工作流 类。许可 按 KV、R2、D1、SERVICE、DO、ASSETS、QUEUE、EMAIL、LOADER、RATE_LIMIT、ENV、SECRET、SECRETS_STORE、VERSION、ANALYTICS、WORKFLOW 列出可访问的绑定名;未列出的绑定不能调用。当前可读取请求、设置一次文字响应、发出文字 HTTP 请求,调用 KV、R2、D1 的基础操作,通过 Service binding、Assets binding 或 Durable Object 名称发出请求,并执行 Queue 生产者和消费者的基础操作以及 Send Email 构造对象的发送。调用 Promise 使用 JSPI,当前事件完成后不保留 Wasm 栈;跨事件任务须由豫言或平台持久步骤恢复状态。
云工请求改址、云工资产请求句柄、云工服务请求句柄、云工设置响应句柄 让业务路由在豫言中转送原生请求与响应。Assets 改址取静态文件,以及两个本地 workerd 之间的 Service binding POST 和二进制往返,均已通过 Wrangler 4.129.0 验证。URL 与 URLSearchParams 解析已有具名豫言接口并通过本地 workerd 验证;完整官网路由仍需路径解码、重定向和错误边界的接口与验收。
队列事件中,豫言先用 云工事件种类 识别 queue,再读取批次名、消息数、消息正文及元数据,并逐条 ack、retry 或在批次级操作。消息句柄只在该次调用内有效。Wrangler 4.129.0 本地 workerd 已验证“HTTP 投递→Queue 消费→KV 记状态→另一次 HTTP 读取”;逐条重试和延迟在 Node/V8 的真实豫言 Wasm 与模拟批次上验证,生产平台重试边界仍待验。
本库已有不透明对象句柄、二进制值交换、短字节流,以及 Durable Object 内部字符串存储、基础 SQLite SQL、异步 KV 事务与 alarm;非 JSON 结构化克隆值、队列全部选项和其他 Workers API 尚未覆盖。新增能力须以独立子模块、具名授权和真实 workerd 测试交付。
scheduled 事件可读取 cron 表达式和计划时刻,并调用 noRetry。计划时刻以纪元毫秒的十进制字符串返回,避免大整数在桥接时丢失精度。Wrangler 4.129.0 本地 workerd 已验证定时事件写入 KV,随后独立 HTTP 事件读回计划信息,且本地端点报告 noRetry: true。
email 事件可读取邮件信封、标头、原始 MIME 字节流及可转发状态,并调用拒收或按收件地址转发。Wrangler 4.129.0 本地邮件端点已验证:豫言读取元数据、主题和原文首块后拒收,端点返回拒收原因;转发仅以真实 Wasm 和模拟邮件对象验证。带自定义标头的转发已用真实 Wasm 与模拟邮件对象验证;回复已用豫言构造 MIME 并在本地 workerd 验证;完整 MIME 解析与生产邮件路由仍待验证。邮件与定时句柄只在当前事件中有效。
网址。豫 与浏览器库提供相近的 URL、URLSearchParams 豫言接口。Wrangler 4.129.0 本地 workerd、兼容日期 2026-09-10 已验证从真实 Request 解析 URL,修改活动查询参数并返回改写后的全文;该日期已启用 url_standard。本地 workerd 明确返回 URL.createObjectURL() is not implemented,故云工库不声明对象 URL 接口。详见 网址接口.清单.tsv。
通用 豫言持久对象 类由 入口.mjs 导出。Wrangler 需给它配置同名 Durable Object 绑定与 SQLite exports 声明,例如 {"durable_objects":{"bindings":[{"name":"测试对象","class_name":"豫言持久对象"}]},"exports":{"豫言持久对象":{"type":"durable-object","storage":"sqlite"}}};业务仍以 云工事件种类 区分 durable-fetch、durable-alarm、durable-transaction 及套接字事件。持久对象内部。豫 提供字符串与 JSON 兼容值存储、单次参数化 SQL、预列同步事务、异步 KV 事务和 alarm 接口。Wrangler 4.129.0 本地 workerd 已验证对象请求、告警以及重启后 KV 和 SQLite 行仍可读取;SQL 游标在同一个宿主调用内同步消费。旧 KV 后端、非 JSON 结构化克隆值及真实休眠恢复尚待验收,详见 持久对象接口.清单.tsv。
每次对象 fetch 或 alarm 都新建豫言 Wasm 实例并运行入口;Wasm 栈与句柄不会跨事件保留。对象实例重建时,豫言须从 ctx.storage 的 KV 或 SQLite 读取任务状态。上述重启测试验证了这条恢复路径,但尚未覆盖并发交错、重试和生产环境故障恢复。
同步事务接口由豫言给出有序 SQL 与参数列表,宿主只在 transactionSync 回调中逐条执行并同步取尽结果;这是预先列好的事务,不支持在事务中等待豫言做条件分支。本地 workerd 已验证两步提交、第二步故障时整批回滚,并在进程重启后保留已提交的两行与 JSON 兼容对象。其他结构化克隆类型及事务选项还需逐项验收。
异步事务接口 云工持久事务执行 以事务名重入同一豫言程序。回调以 云工事件种类 = durable-transaction 和 云工持久事务名 分派逻辑,用现有 云工持久读取文字、云工持久写入文字、癸象读写及删除接口操作平台 txn,最后调用一次 云工持久事务输出;可用 云工持久事务回滚 放弃写入,异常也会自动回滚。事务回调不可再启动事务。Wrangler 4.129.0 本地 SQLite 对象已验证读取两键后条件更新、显式回滚与异常回滚;旧 KV 后端和并发交错待验。Cloudflare 事务文档说明旧 KV 后端必须用 txn 读写。
独占区与安全变体:云工持久独占执行安全 调用 ctx.blockConcurrencyWhile,在回调里以 durable-block 事件重入 Wasm(云工持久独占名、云工持久独占参数、云工持久独占输出安全 取参与设结果),区内失败作为(阴,原因)返回而不抛给平台回调(平台会因此重置整个对象)。云工持久事务执行安全、云工持久写入值安全、云工持久列举值安全 是对应原语的“失败归值”版本,供 OS 适配转成可捕获的豫言异常。Wrangler 4.129.0 本地 workerd 已验:独占区与事务回调运行期间他事排队,回调超过 30 秒平台重置对象,事务回调内的告警与直接存储写入随事务回滚;事件墙钟时限(默认 30 秒,durable-block、durable-transaction 默认 25 秒)可由构建产物的 执行配置.json 调整,详见 豫言操作系统/宿主/云工/说明.汉语.md。
云工持久列举癸象 接受平台 list 选项对象,返回按键排序的 [[键, 值], …] 癸象数组;云工持久列举值文 提供 JSON 文本形式。支持 start、startAfter、end、prefix、reverse、limit、allowConcurrency、noCache,并在事务回调中自动使用 txn.list。大对象宜传 limit 分页,避免一次载入全部键值。Wrangler 4.129.0 本地 SQLite 对象已验证范围、续页、逆序、限量、JSON 对象值,以及事务中看见新键而回滚后消失;旧 KV 后端和特殊结构化克隆值待验。Cloudflare 列举文档列明选项与排序语义。
多键接口 云工持久批读癸象、云工持久批写癸象、云工持久批删癸象 分别对应平台的数组 get、对象 put、数组 delete;另有同名「值文」形式。每次最多 128 键,批读以排序的 [[键, 值], …] 返回并略去缺失键,批删返回实际删除数量。事务回调中自动使用 txn。Wrangler 4.129.0 本地 SQLite 对象已验证多键读取排序、缺失键省略、JSON 对象值、删除计数和事务内读写回滚;选项的行为、旧 KV 后端及特殊克隆值待验。Cloudflare 异步 KV 文档列出这三种重载。
云工持久同步 等待平台 storage.sync();云工持久清仓 调用 storage.deleteAll(),接受平台选项对象。两者在普通 Durable Object 事件中使用。Wrangler 4.129.0、兼容日期 2026-09-10 的本地 SQLite 对象实测:allowUnconfirmed KV 写入后 sync 返回,重启仍读到 KV 键、SQL 表及 alarm;deleteAll 后三者均消失,第二次重启后仍为空。本地 workerd 对 deleteAll({allowUnconfirmed:true}) 提示该选项不受支持并禁用,实际清仓仍成功。旧 KV 后端和云端刷盘故障语义待验。Cloudflare 存储文档说明清仓范围与兼容日期差异。
SQLite 同步 storage.kv 已有 云工同步键值读取癸象、云工同步键值写入癸象、云工同步键值删除 和 云工同步键值列举癸象。同步读用存在标记区分缺键与 JSON null;列举在同一次宿主调用中消费迭代器。本地 workerd 验证异步写入被同步读到、同步写入被异步读到、逆序限量、删除返回值及进程重启后的数据。旧版 KV 后端没有同步接口;特殊结构化克隆值仍待验。Cloudflare 同步 KV 文档为接口依据。
云工持久SQL游标新建 返回当前事件内的游标句柄;云工持久SQL游标下一行 与 云工持久SQL游标余行 可读取具名对象或 raw() 数组,二者共享位置。云工持久SQL游标单行安全文 封装 one() 的单行结果与零行、多行错误;属性接口返回列名、rowsRead、rowsWritten,另可取数据库大小。Wrangler 4.129.0 本地 SQLite 对象已验证混合迭代、三种 one() 结果、读取计数变化及写入计数。rowsRead 可能包含查询扫描行,不等于返回行数;游标跨异步边界不保证稳定快照,需稳定快照时使用原有的一次性 云工持久SQL执行。Cloudflare 游标文档为语义依据。
云工持久读取值安全文 用单个 JSON 文本返回 {"存在":false} 或 {"存在":true,"值":…},事务回调中也使用平台 txn.get。最小事务测试已验证缺键与现有 JSON 对象值。额度应用曾出现的模式匹配失败来自业务侧 字段 函数的嵌套模式匹配,单文读取没有消除它;独立云仓任务已改为显式递归遍历并完成其验收。两端值桥会报告模式匹配失败,避免被“未授权宿主能力:豫言_打印通用值”掩盖。
命名服务入口 豫言服务入口 由构建器按可选第七参数导出别名(如 CloudModel),调用其 fetch 会产生 service-fetch 事件。Wrangler 4.129.0 本地 Service binding 已验证它与公网 fetch 事件分开,路由和模型请求仍由豫言决定。可选 Secret 用 云工秘密文字安全文 判断:已授权但缺失返回 {"存在":false},空字符串返回 {"存在":true,"文字":""};本地假绑定验证了三种状态,响应未含密钥。未授权名称依旧报错;生产 Secret 和轮换待验。Cloudflare 命名入口文档为导出依据。
WebSocket
物字与文件。豫 为 Blob/File 提供字节和组合构造、元数据、切片、原生 arrayBuffer()/bytes()、text() 与 stream();流。豫 还可读文字流块。Wrangler 4.129.0 本地 workerd 已验 00 FF 41 无损往返、Blob+UTF-8 文本组合、负索引切片及 File 名称、MIME 和修改时。该版本有 Blob.bytes(),没有实验性 Blob.textStream();后者的安全入口返回失败。FileReader、FileList 和大对象流边界待补,详 物字文件接口.清单.tsv。W3C File API列出规范语义。
流。豫 现有通用 WritableStream writer:取得写器、查询锁和队列容量、等待 ready/closed、发起字节写入及关闭并领取 Promise 句柄,豫言可先读下游再等待操作结果。本地 workerd 以 gzip 流验证两块在途写入、关闭、读取和 00 FF 41 无损解压;有效写器的 abort() 与无效句柄的安全返回也已验。Wrangler 4.129.0 原生最小例显示,流关闭或中止后调用 releaseLock(),writable.locked 仍为真;流仍打开时释放则为假。宿主原样返回平台属性,待新版 workerd 复核。满载背压与可读侧错误传播待验,详 可写流接口.清单.tsv。Cloudflare WritableStreamDefaultWriter 文档列出平台接口。
压缩流。豫 提供 CompressionStream、DecompressionStream 的构造及读写端句柄,也提供短字节安全转换。Wrangler 4.129.0 本地 workerd 已验 gzip、deflate、deflate-raw 对 00 FF 41 的压缩解压往返;按需可读流还经过两层 云工流接转换 管道,两次重新进入豫言 Wasm 供块并读回六字节。坏 gzip 和无效格式返回失败与 UTF-8 错误字节。坏 gzip 同时使 workerd 打印 Uncaught TypeError 诊断,即使写入管道和读取结果的 Promise 均已显式等待;请求仍正常完成,后续需定位此运行时行为。一次转换会在宿主内缓冲全部输出,大流应使用读写端;满载背压和取消仍待验。Cloudflare 当前文档只列这三种格式,见 压缩流接口.清单.tsv 和 Workers Web standards。
事件源。豫 提供 EventSource URL 连接、授权 Service binding fetcher、Cloudflare 扩展 EventSource.from(ReadableStream)、自定义事件订阅、等待、状态与关闭。本地 workerd 已分别从本地 SSE 服务及豫言按需生成的流收到 notice、数据“甲”和事件号 7;两个豫言 Worker 也经授权 SERVICE 绑定完成同一事件往返。重连、错误与跨请求寿命待验,见 事件源接口.清单.tsv。Cloudflare EventSource 文档列出扩展接口。
消息通道。豫 将 Workers 的 MessageChannel 接入豫言:同一事件内可创建双端、发送 JSON 兼容值或原始字节、等待消息和关闭事件。本地 workerd 已验对象、00 FF 41 字节与 close 回调。Cloudflare 当前只允许单个 Worker 实例内使用,不支持 transfer list 或转移 MessagePort;这些是平台边界。复杂结构化值、消息错误与跨事件存续待验,见 消息通道接口.清单.tsv。Cloudflare MessageChannel 文档说明限制。
Console 子库 控制台。豫 提供五种日志级别的文字入口,以及接受 JSON 参数数组的标准方法入口。Wrangler 4.129.0 本地 workerd 已确认 debug、info、log、warn、error 都输出,且多参数 log 保留数值与对象。count 和 assert 可调用;Cloudflare 把一部分方法列为仅部分支持或无操作,createTask 在生产环境会抛错,所以可调用不等于跨环境有效。逐项状态见 控制台接口.清单.tsv。Cloudflare Console 文档列出平台行为。
TCP 子库 传输控制。豫 使用 Workers 的 cloudflare:sockets:豫言可选择 off、on、starttls 和 allowHalfOpen,等待 opened,读取原生字节流、写入字节、关闭或升级 TLS;异常通过安全入口返回。Wrangler 4.129.0 本地 workerd 连本地 TCP 回声服务,写入并读回 00 FF 41 后关闭,按字节验证通过;连接不可达端口时,opened 的错误也返回豫言。TLS、长连接和生产网络限制仍待验,逐项状态见 传输控制接口.清单.tsv。Cloudflare TCP sockets 文档列出接口与平台限制。
WebSocket 子库现在由豫言发起升级并返回原生 HTTP 101。宿主以 WebSocketPair 适配平台,message、close、error 事件分别重新运行同一豫言 Wasm;当前套接字、文字或字节消息由豫言接口读取。真实 Chrome 豫言客户端对本地 workerd 豫言服务端完成文字和 00 FF 41 二进制往返及正常关闭,详 套接字接口.清单.tsv。Cloudflare WebSockets 文档列出平台接口和关闭语义。故障边界仍待补齐。
普通 Worker 的子协议协商现由豫言读取 Sec-WebSocket-Protocol 请求标头并选择一个已提供的协议;宿主在 HTTP 101 中写入选中协议。真实 Chrome 提议 yuyan.v1、backup.v1,豫言选择前者,浏览器读回 WebSocket.protocol=yuyan.v1 并完成消息往返。无效 token 边界仍待验。WebSocket 子协议标头说明协商约束。
Durable Object 也已接入同样的选择路径:云工持久套接字建对并应答协议 让豫言在对象升级请求中选择已提供的协议。真实 Chrome 提议 yuyan.do.v1、backup.v1,读回前者;自动回复、附件和关闭流程继续通过。非法协议 token 与协商失败路径仍待验。
Workers 出站 new WebSocket(url) 已由豫言具名入口和事件重入桥接。真实 workerd 连接本地 Node ws 服务:open 后豫言发送“豫言”,收到“回:豫言”后再发送 00 FF 41,逐字节核对回显,close 记录 1000/“完成”。连接不可达端口时,豫言收到 error 和代码 1006、正常:false 的 close 事件。宿主将 binaryType 设为 arraybuffer,在连接关闭前以 ctx.waitUntil 保持请求上下文,并记录回调异常;此验证只覆盖短连接,长连接寿命和子协议仍待测。Cloudflare 示例列出两种出站连接方式。
第二条出站路径 云工套接字请求出站(网址, 半开) 通过 fetch 的 Upgrade: websocket 取得并接受原生套接字。本地 workerd 与 Node ws 服务验证了 open、文字、00 FF 41 字节和正常关闭。半开=阳 时,远端主动发关闭帧,豫言在 close 回调读到 readyState=2,再主动 close() 完成握手。长连接寿命、拒绝升级、子协议与代理竞态仍待验证。Cloudflare WebSocket 示例说明 allowHalfOpen 的用途。
Durable Object 的 WebSocket Hibernation API 已接入通用外壳:webSocketMessage、webSocketClose、webSocketError 转发给豫言 Wasm;对象内部可用 云工持久套接字建对并应答、云工持久套接字诸柄文 和附件读写接口。Wrangler 4.129.0 本地 workerd 与真实 Chrome 验证了两条消息之间附件从“始”变为“续”、按标签取连接,以及关闭回调写入持久存储的代码 1000、原因“完成”、正常标志。根据 Cloudflare 文档,本地开发会交付休眠式回调,但不会实际驱逐对象;云端休眠后重建与附件恢复仍未验证。
自动回复接口已在同一环境验证:豫言配置“探→应”,平台直接回“应”;下一条普通消息的豫言回调读到自动回复时间戳。豫言清除规则后再次收到“探”,由回调回复“续|探”。标签读取、事件时限设置与读回 1000 毫秒也已实测。Wrangler 4.129.0 返回的配对用 request/response 属性,而当前 Cloudflare 状态文档写 getRequest()/getResponse();宿主适配这两种形式。此测试不能证明休眠期间确实不唤醒对象,也未验证事件超时的触发。
HTML 改写
云工HTML改写响应(原响应句柄, 选择器) 返回流式改写 Response 句柄,可交给 云工设置响应句柄。每次元素命中触发 html-element 事件,重新运行同一豫言 Wasm;程序用 云工HTML元素句柄 取得当前元素,在回调有效期间读取与修改。回调可以等待异步宿主操作。测试中的两个 <p> 元素分别按 data-n 改写,已在 Wrangler 4.129.0 本地 workerd 得到对应结果。Cloudflare 的 HTMLRewriter 文档允许异步元素处理器。
云工HTML改写响应全 接受事件数组,可登记 element、text、comments、doctype、document-text、document-comments、end。云工HTML改写响应规则 接受多条 {selector,events} 规则及文档事件数组。事件名分别加 html- 前缀,当前对象经 云工HTML当前句柄 访问。元素回调可调用 云工HTML登记尾签,在 html-end-tag 事件中处理尾标签。真实 workerd 验证了两条选择器和尾标签前后插入;分块输入的同一文本节点产生“甲”“乙”及空的终块回调,须依据 lastInTextNode 处理。改写响应是流,错误可能在 HTTP 响应已开始后传播。
元素具名操作现覆盖属性枚举、存在检查、增删属性、标签名和命名空间读取、标签改名、移除状态、前后与内部首尾插入、替换、移除以及去标签留内容。插入操作由豫言指定纯文本或原 HTML 模式;纯文本会按平台规则转义。六个元素的组合测试已在本地 workerd 验证,结果见 HTML元素全法。测试。豫。
云工HTML内容句柄操作 可把豫言构造的 Response 或 ReadableStream 交给改写器。真实 workerd 已验证 Response 替换和三块 ReadableStream 内文。HTML 元素回调中用 云工创建可读流 连续主动写两块会与解析器背压互等;云工创建回调可读流 在下游每次拉取时以 stream-pull 重新运行豫言 Wasm,由 云工流回调供块(字节, 下一状态, 已终) 返回内容,解决该时序。回调抛错时本地 workerd 已送出 HTTP 200 及部分 HTML 后截断,并记录运行异常;应用如需完整响应,须在发送前消费并检查转换结果。客户端断连与生产者失败路径仍待验,详 流接口.清单.tsv。
按需流的取消已用真实 workerd 验证:豫言读取首块后调用 云工取消流读取器(读取器号, 原因),底层 stream-cancel 事件重新运行豫言 Wasm;回调读取下一状态“次”和原因“停”,写入 KV,原请求等待取消完成后读到相同标记。此测试覆盖显式 reader 取消;HTTP 客户端断连和取消回调自身失败仍待验证。
云工读取流块安全 返回 (是否成功, JSON 块信息或错误文字)。成功时可由 云工解安全流块 取得 (是否有数据, 原始字节串),临时字节句柄随即释放;流结束返回无数据。真实 workerd 验证了“甲”的 UTF-8 字节无损往返、结束标记,以及豫言生产者回调故障转为显式错误后仍由原 HTTP 事件正常作答。其他错误类型与客户端断连仍待验证。