簡體   English   中英

Semaphore NodeJS 無限加載頁面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM