[英]Semaphore NodeJS endless loading page
我正在編寫一個程序,當客戶端加入“/json”時,它會給你一個 json。我想用一個信號量來調整它,每次有一個客戶端請求資源,如果它發生了變化,它就會給你。 我在 npm 中使用了一個名為“信號量”的 package ( 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() function 讓客戶端等待離開。 toggle 和 toggle2 基本上是 2 個變量,在 json(在數據庫中)中使用 boolean。 當主路由開始時,第一個切換獲得 boolean,當客戶端加入 json 路徑時,等待切換變化。 這段代碼中的問題是客戶端會無限期地嘗試在頁面中進行連接,但服務器沒有響應。
好吧,你似乎錯過了一些東西。 也就是說,您不調用res.end
並且僅當await utils.getToggleKas()
sem.leave
結果發生變化時才調用 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?
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.