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?
})
我正在编写一个程序,当客户端加入“/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?
})