Camofox Browser
Arquitectura de Camofox: contextos, grupos, reservas de página y recuperación
Traza el ciclo del navegador y distingue aislamiento de estado, autorización del cliente y admisión de recursos.
Qué aprenderás
- Un contexto de usuario contiene grupos, no contextos de cookies separados.
- Las reservas representan creación previa a la incorporación al grupo.
- Admisión, reciclaje, expiración e inactividad requieren tratamiento propio.
Antes de empezar
- HTTP y JSON básicos
- Servicio aislado y página propia o permitida
Explica la frontera real del servicio y verifica la muestra de observación o ciclo propuesta.
Conclusiones clave
- Un contexto de usuario contiene grupos, no contextos de cookies separados.
- Las reservas representan creación previa a la incorporación al grupo.
- Admisión, reciclaje, expiración e inactividad requieren tratamiento propio.
Dibujar la jerarquía con precisión
getSession normaliza userId y lo busca en el mapa sessions. Una sesión nueva obtiene un contexto de navegador; tabGroups organiza sus páginas. sessionKey selecciona un grupo y el ID de pestaña un estado concreto. Esto explica por qué dos grupos de un mismo usuario no son automáticamente dos contextos independientes de cookies.
Las sesiones existentes se comprueban por cierre y contexto vivo. La creación se agrupa por usuario para que solicitudes simultáneas compartan trabajo en curso y no creen duplicados independientes. Es coordinación de recursos, no verificación de identidad. La autorización debe decidir qué cliente puede proporcionar cada userId antes de entrar en esta maquinaria.
La página puede existir antes de pertenecer al grupo
El auxiliar de page lease rastrea páginas fuera de la estructura normal de grupos. Una reserva empieza antes de adjuntar la página, puede guardar después la página creada y se libera al completar la transición. Los recolectores consultan reservas activas para no considerar vacía una sesión durante la creación. Representa explícitamente un estado intermedio del ciclo de vida.
Admisión y reciclaje son ramas distintas. getSession rechaza al alcanzar el máximo de sesiones; el manejador de pestañas intenta reciclar una antigua al alcanzar los límites y rechaza si no puede. El cliente no debe asumir que abrir otra conserva todas las anteriores. Observa el estado devuelto y mantén únicamente identificadores vigentes.
La recuperación cambia el significado de disponibilidad
El manejador de salud distingue recuperación y ausencia inesperada del navegador de una parada inactiva intencional. Puede devolver 503 durante recuperación y mantener salud correcta cuando la parada fue deliberada. Evita confundir optimización inactiva y caída, pero obliga a separar comprobaciones de conectividad y capacidad de realizar trabajo de navegador.
La configuración incluye expiración de sesión, inactividad de pestaña y navegador, concurrencia por usuario y límites globales. No son intercambiables: unos caducan estado, otros acotan trabajo y otros recuperan procesos. Prueba con una muestra propia e identifica qué control hizo desaparecer una pestaña antes de aumentar todos los plazos o capacidades a la vez.
Pasos de implementación
- 1
Dibuja navegador, contexto, grupo y pestaña.
- 2
Sigue adquisición, incorporación y liberación de reserva.
- 3
Prueba un límite pequeño y observa reciclaje o rechazo.
- 4
Distingue salud inactiva y fallo de renderizado.
Ejemplo para copiar
Navegador
contexto de usuario
sessionKey A -> pestaña 1, pestaña 2
sessionKey B -> pestaña 3
Creación: reservar -> crear página -> incorporar -> liberar
La autorización del cliente es una frontera separada.Preguntas frecuentes
¿Diferentes sessionKey aíslan cookies?
No por sí solos. La jerarquía revisada coloca los grupos bajo el contexto del usuario; razona sobre esa frontera.
¿Por qué rastrear una página no incorporada?
La reserva evita que la limpieza considere vacía la sesión durante la creación intermedia.
Fuentes
- README.mdFuente verificada 2026-09-08
- package.jsonFuente verificada 2026-09-08
- DockerfileFuente verificada 2026-09-08
- lib/auth.jsFuente verificada 2026-09-08
- lib/snapshot.jsFuente verificada 2026-09-08
- lib/extract.jsFuente verificada 2026-09-08
- lib/config.jsFuente verificada 2026-09-08
- lib/reporter.jsFuente verificada 2026-09-08
- lib/page-lease.jsFuente verificada 2026-09-08
- server.jsFuente verificada 2026-09-08
- tests/unit/snapshot.test.jsFuente verificada 2026-09-08
- tests/unit/auth.test.jsFuente verificada 2026-09-08