Camofox Browser
Camofox 架构:用户上下文、标签组、页面租约与空闲恢复
追踪服务器浏览器生命周期,区分浏览器状态隔离、调用方授权和资源准入。
你将学会
- 用户上下文包含标签组,组不是独立 cookie 上下文。
- 页面租约表示附加到组之前的创建状态。
- 准入、回收、过期与空闲关闭需要分别处理。
开始前需要
- 基础 HTTP 与 JSON 知识
- 隔离服务与自有或获准测试页面
解释本章真实服务边界,并核验建议的观察或生命周期样例。
先看结论
- 用户上下文包含标签组,组不是独立 cookie 上下文。
- 页面租约表示附加到组之前的创建状态。
- 准入、回收、过期与空闲关闭需要分别处理。
准确绘制状态层级
getSession 规范化 userId,并在 sessions Map 中查找。新会话取得浏览器上下文,tabGroups 在会话下组织页面。sessionKey 选择一个组,标签 ID 选择具体标签状态。这个层级解释了为什么同一用户的两个组,不会自动成为两个独立 cookie 上下文。
已有会话会检查关闭状态和上下文存活情况;同一用户的创建请求会合并,让并发请求共享正在创建的任务,而不是各自建立重复会话。这是资源协调,不是身份核验。授权层需要在标识进入浏览器状态逻辑前,决定哪个调用方可以提交哪个 userId。
页面可能先存在,再进入标签组
小型页面租约辅助模块跟踪尚未进入常规组结构的页面。租约可以在页面附加前开始,之后持有新建页面,并在转换完成后释放。清理器可利用活动租约,避免在创建期间误以为会话为空。这是显式表示中间生命周期状态的实用案例。
准入与回收是不同分支。getSession 在达到会话上限时拒绝;创建标签处理器在达到标签上限时先尝试回收旧标签,无法回收才拒绝。客户端不能假设新开一个标签后所有旧标签仍原样存在,应观察返回状态并只保留当前有效标识。
恢复机制改变就绪的含义
健康处理器区分恢复、浏览器意外缺失和主动空闲停止。恢复中可能返回 503,而主动停止浏览器时服务仍可健康。这避免把空闲优化当作进程故障,但要求运维使用不同检查来确认服务可达和浏览器负载真正就绪。
所查配置包含会话超时、标签不活动、浏览器空闲超时、每用户并发及全局上限。这些控制不能互换:有的过期状态,有的限制工作量,有的回收浏览器进程。应使用自有样例测试生命周期,先解释标签消失由哪个控制导致,再决定是否调整超时或容量。
实施步骤
- 1
分别画出浏览器、用户上下文、组和标签。
- 2
追踪租约取得、页面附加与租约释放。
- 3
用较小测试上限观察回收或拒绝。
- 4
区分空闲健康与失败的页面就绪检查。
可复制示例
浏览器
用户上下文
sessionKey A -> 标签 1、标签 2
sessionKey B -> 标签 3
页面创建:取得租约 -> 创建页面 -> 附加 -> 释放租约
调用方授权是独立边界。常见问题
不同 sessionKey 能隔离 cookie 吗?
仅靠这个值不能。所查结构把标签组放在用户浏览器上下文之下,应围绕上下文边界理解状态。
为什么要跟踪未附加页面?
页面租约避免清理逻辑在中间创建状态将会话误判为空。
资料来源
- README.md来源核查 2026-09-08
- package.json来源核查 2026-09-08
- Dockerfile来源核查 2026-09-08
- lib/auth.js来源核查 2026-09-08
- lib/snapshot.js来源核查 2026-09-08
- lib/extract.js来源核查 2026-09-08
- lib/config.js来源核查 2026-09-08
- lib/reporter.js来源核查 2026-09-08
- lib/page-lease.js来源核查 2026-09-08
- server.js来源核查 2026-09-08
- tests/unit/snapshot.test.js来源核查 2026-09-08
- tests/unit/auth.test.js来源核查 2026-09-08