Buffer compartido de 12 tokens con reposicion anticipada y solapamiento. Simula latencias de solver de 15 a 40 s.
Disponibles
0
En vuelo
0
Usados
0
Expirados
0
Malos
0
El objetivo es mantener siempre 12 tokens frescos disponibles. Cada token de reCAPTCHA vive 120 segundos y es de un solo uso, asi que el pool se repone de forma continua sin intervencion manual.
Cada token guarda cuatro campos: id (identificador para rastreo y logs), created (marca de emision, que gobierna la expiracion), status (vigente, usado, expirado o malo) y token (el string que se envia al backend). La edad se calcula como ahora - created.
La clave para no quedarse sin tokens es no esperar a que un token muera para reemplazarlo. Al llegar a los 80 segundos de edad el token se marca para reposicion y se dispara la solicitud del nuevo, pero el token viejo sigue vivo y usable hasta sus 120 s reales.
Esos 40 segundos de margen cubren el peor caso de latencia del solver: 80 + 40 = 120. El reemplazo entra antes de que el viejo expire, de modo que nunca hay un hueco. Por eso en pantalla veras a veces mas de 12 tarjetas: son los tokens en reposicion mas sus reemplazos en vuelo, un excedente temporal e intencional.
Lo que cuenta hacia los 12 no son solo los tokens vivos, sino la oferta efectiva: tokens en vuelo mas los vivos que todavia no entraron en reposicion. Sin contar los que ya se pidieron, el sistema dispararia solicitudes de mas durante los 15 a 40 s que tarda cada entrega.
pedir() simula la latencia; en real se reemplaza por la llamada a la API de CapMonster o 2Captcha, respetando el limite de hilos del plan.created aqui es la hora de emision simulada; en real conviene usar la hora de entrega del solver o, mejor, el createTime del assessment cuando se conozca.