2017-06-18 87 views
-1

我創建一個節點的應用程序中,爲每個請求我打電話定期節點應用程序可以處理多少個setInterval()函數?

功能app.js

var express = require('express'); 
var request = require('request'); 
var bodyParser = require('body-parser'); 

var app = express(); 

const PORT = process.env.port || 1234 

app.listen(PORT,() => { console.log(`Server running at ${PORT} ...`)}); 



var router = express.Router(); 

function ping(i, appURL) 
{ 
    request(appURL, function (error, response, body) { 
     console.log('i:', i ++ ,'url: ', appURL, 'statusCode:', response && response.statusCode, 'Time: ', new Date()); 
    }); 
} 

router.route('/') 
    .post(function(req, res) { 
     var appURL = req.body.url; 
     var i = 1; 
     ping(i, appURL); 
     setInterval(function() { 
      request(appURL, function (error, response, body) { 
       ping(i, appURL); 
      }); 
     }, 1800000); 
     res.end('Success'); 
    }); 

app.use(bodyParser.json()); 
app.use('/', router); 

每當有到應用程序的請求,我打電話了ping功能每30分鐘

做一個節點的應用程序可以處理更多的setInterval()?

使用setTimeout()而不是setInterval()會很好嗎?

+1

您可能正在尋找[cron任務](https://github.com/kelektiv/node-cron)。 –

回答

1

節點應用程序可以處理多少個setInterval()函數?

nodejs旨在處理大量定時器(至少數十萬)。

所以,setInterval()定時器少數是完全沒有問題。但是,添加一個永久運行的新時間間隔,每次路由被擊中時,對我來說似乎都是一個錯誤,因爲他們會無限期地積累,直到您的服務器重新啓動。

如果您更詳細地描述了什麼問題,你真的是在努力解決,我們可以幫你找到一個合適的方式代碼。你現在擁有的只是一次又一次地運行一個request(),並沒有對結果做任何事情,每當你的路線再次被擊中時,它就會啓動整個事情再次運行,所以你有多次運行它的實例。這看起來像一個錯誤的設計。

下面是指向信息有關的計時器是如何設計的另一個的NodeJS答案:How many concurrent setTimeouts before performance issues?

它是很好用的setTimeout()代替的setInterval()?

它不會改變你的可擴展性。有不同的設計理由使用重複的setTimeout()setInterval(),但都不會改變你的核心問題。

+0

@GaNeShKuMaRm - 這是否回答你的問題? – jfriend00

相關問題