审核结果用 SSE 推送:断线续传、去重与待审状态别漏掉

发布时间:2026/10/25 17:54:23
审核结果用 SSE 推送:断线续传、去重与待审状态别漏掉 审核提交成功后连接断了。页面该显示什么如果错误处理里直接切成“通过”推送系统就成了绕过审核的入口。连接状态和审核状态必须分开保存。ticket 与事件游标各管一件事提交接口返回 ticket表示这次审核任务流事件带事件 ID表示这个任务的有序变化。服务端先持久化状态与事件再推送。重连从持久日志补发而不是从内存里猜哪些事件客户端可能没看到。WHATWG 的 SSE 规范说明了事件 ID、Last-Event-ID 和重新连接处理。10 月 22 日是当前页面的更新日期不是 SSE 的首发日期。原生 EventSource 发起 GET不能给它塞一个 POST 请求体。POST 流需要自行处理分帧与恢复API 密钥也不能写进浏览器 URL。下面采用教学合同每个 ticket 的 seq 从 1 连续增长。标准 SSE 的 id 原本是字符串并不保证连续或可做数值比较只有服务端明确承诺该序列我们才能用缺号判断是否需要拉取快照。const terminalnew Set([APPROVED,REJECTED,CANCELED]); const edges{ PENDING:new Set([REVIEW,APPROVED,REJECTED,CANCELED]), REVIEW:new Set([APPROVED,REJECTED,CANCELED]) }; function applyReview(s,e){ if(!e||e.ticket!s.ticket||!Number.isSafeInteger(e.seq)||e.seq1) return {...s,error:invalid-event}; if(e.seqs.last)return s; // 已持久处理的重复事件 if(e.seq!s.last1)return {...s,needsSnapshot:true}; if(terminal.has(s.status))return {...s,error:terminal-conflict}; if(!edges[s.status]?.has(e.status))return {...s,error:invalid-transition}; return {ticket:s.ticket,last:e.seq,status:e.status,needsSnapshot:false}; } function connectionLost(s){return {...s,connection:reconnecting};} const initial{ticket:demo-ticket,last:0,status:PENDING,needsSnapshot:false};重连不等于重新提交图中 41、42 是说明游标的局部示意事件从服务端向客户端下行续传请求从客户端向流服务上行。REVIEW 是当前待审状态不是业务终态。客户端应保留最后成功应用的游标服务端必须校验 ticket 所属用户再按游标读日志。只因为请求里带了 Last-Event-ID 就信任它会把续传接口变成跨任务读取入口。发现序列缺口时页面显示“结果同步中”从有版本号的状态快照恢复。不能跳过缺失事件后把游标推进到最新值也不能在断线时重新发起审核。若旧日志已过保留期服务端应明确要求快照恢复而不是沉默返回空流。连接层也需要收尾服务端定期发注释心跳它维持连接不改变审核状态。反向代理是否缓冲、空闲超时多长、浏览器是否实际收到心跳都要在测试环境检查。组件卸载或收到终态后调用 close避免同一 ticket 留下多条连接。终态冲突不在客户端自行“择优”APPROVED 后又来 REJECTED应查询权威快照并记录矛盾。若业务支持终态后的撤销需要新的版本和明确的状态迁移不能私下复用本例。本轮验证了重复、缺号、未知事件、断线保持待审和终态冲突。没有启动 SSE 服务器或代理不声称恰好一次投递。去重只能限制重复应用服务端任务执行仍需自己的幂等和事务边界。复现记录本轮在 Node.js v26.3.0 中运行随文核心逻辑的构造样例进程退出码为 0。测试输出PASS: disconnected pending, deduplication, sequence gap, terminal conflict, ticket boundary将上方完整代码保存为 example.mjs以 Node.js 26 执行 node example.mjs 可加载核心与教学输入函数默认不访问网络、模型或硬件。浏览器适配入口需要明确传入对应对象本轮未执行这些入口。上面的通过项来自独立构造样例不能替代集成测试。资料与时效HTML Living Standard: Server-sent events首次发布日期未核实更新 2026-10-22。语音合成LAS首次发布日期未核实更新 2026-10-16。本稿对应原预排时段实际发布前须人工复核来源更正、SDK/API 版本及可用性不据此预言 10 月 24–31 日的新事件。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询