我试图用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