我正在撰寫一個程式,當客戶端加入“/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 路徑時,等待切換切換。這段代碼的問題是客戶端無休止地嘗試無限連接頁面,但沒有來自服務器的回應。
uj5u.com熱心網友回復:
好吧,你似乎錯過了一些東西。即,您不呼叫res.end
并且sem.leave
僅在await utils.getToggleKas()
更改結果時才呼叫
看看下面的代碼片段是否有幫助
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?
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/451111.html
標籤:javascript 节点.js 表示 无限循环 信号