Semaphore NodeJS 无限加载页面

Semaphore NodeJS endless loading page

我正在编写一个程序,当客户端加入“/json”时,它会给你一个 json。我想用一个信号量来调整它,其中每次有 1 个客户端请求资源,如果它发生了变化,那么它就会给你。我在 npm 中使用了一个名为“semaphore”的包 (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
            })
        }
    })
})

如您所见,当客户端加入路径时,我使用 sem.take() 函数让客户端等待离开。 toggle 和 toggle2 基本上是 2 个变量,它们在 json(在数据库中)中取一个布尔值。当主路由开始时,第一个切换获取布尔值,当客户端加入 json 路径时,等待切换更改。这段代码中的问题是客户端在页面中不断尝试无限连接,但没有来自服务器的响应。

好的,您似乎漏掉了一些东西。即,您不调用 res.end 并且仅当 await utils.getToggleKas() 的结果更改

时才调用 sem.leave

看看下面的代码片段是否有帮助

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?
})