我試圖用node.js實現一個長的輪詢策略Node.js長輪詢邏輯幫助!
我想要的是當對node.js發出一個請求時,它會等待最多30秒讓一些數據變爲可用。如果有數據,它會輸出並退出,如果沒有數據,它將等待最多30秒,然後退出。
這裏是我想出了一個基本的代碼邏輯 -
var http = require('http');
var poll_function = function(req,res,counter)
{
if(counter > 30)
{
res.writeHeader(200,{'Content-Type':'text/html;charset=utf8'});
res.end('Output after 5 seconds!');
}
else
{
var rand = Math.random();
if(rand > 0.85)
{
res.writeHeader(200,{'Content-Type':'text/html;charset=utf8'});
res.end('Output done because rand: ' + rand + '! in counter: ' + counter);
}
}
setTimeout
(
function()
{
poll_function.apply(this,[req,res,counter+1]);
},
1000
);
};
http.createServer
(
function(req,res)
{
poll_function(req,res,1);
}
).listen(8088);
我的數字是什麼,當一個請求作出poll_function被稱爲其1秒後自稱,通過內本身的setTimeout。所以,它應該保持異步的方式,它不會阻止其他請求,並在完成時提供輸出。
我在這裏使用了一個Math.random()邏輯來模擬不同間隔的數據可用性場景。
現在,我關心的是 -
1)會有什麼問題嗎? - 我根本不希望部署它,但不確定它不會反擊!
2)效率高嗎?如果沒有,任何建議,我該如何改進?
感謝,
安鍵
我[寫了一個長輪詢的例子](http://stackoverflow.com/questions/6052181/node-js-how-to-create-a-http-chat-server/6052332#6052332)服務器爲題。它可能有幫助。 – Raynos 2011-05-23 07:24:52