Estoy escribiendo un programa que cuando un cliente se une a "/ json", te da un json. Quiero ajustar esto con un semáforo en el que 1 cliente por vez solicita el recurso y, si cambia, se lo entrega a usted. Estoy usando un paquete en npm llamado "semáforo" ( https://www.npmjs.com/package/semaphore ).
kasRouter.get(path + '/json',(req,res)=>{ sem.take(async () => { let toggle2 = await utils.getToggleKas() console.log(req) if(toggle2 != toggle){ sem.leave() toggle = toggle2 console.log(toggle) res.json({ 'kas':toggle }) } }) })como puede ver, cuando el cliente se une a la ruta, uso la función sem.take() para dejar que el cliente espere para dejarlo. toggle y toggle2 son básicamente 2 vars que toman un valor booleano en el json (en una base de datos). Cuando comienza la ruta principal, el primer conmutador obtiene el valor booleano y cuando el cliente se une a la ruta json, espera los cambios de conmutador. El problema en este código es que el cliente intenta infinitamente conectarse en la página pero sin una respuesta del servidor.
Ok, parece que te estás perdiendo algunas cosas. Es decir, no llama a res.end y sem.leave solo se llama si el resultado de await utils.getToggleKas() cambia
Vea si el fragmento de código a continuación ayuda
kasRouter.get(path + '/json',(req,res)=>{ sem.take(async () => { let toggle2 = await utils.getToggleKas() console.log(req) if(toggle2 != toggle){ toggle = toggle2 console.log(toggle) res.json({ 'kas':toggle }) } sem.leave() //after every requests, leaves it for a new one }) //res.end() //ends the request in case this doesn't happen elsewhere //see if commenting this out ends the problem? })