node.js和处理redirect后的数据

我有一个用Node.js + Express编写的应用程序来处理传入的数据并将客户redirect到其他地方。 处理可能需要一段时间(主要是统计相关的,所以GEO特定的数据+数据库查找),所以在捕获必要的头文件(用于数据处理)时,在概念上是正确的,发送301/302头文件然后处理捕获的数据? 我们的目标是尽可能快地redirect客户,而不是让他们等待处理完成,因为处理本身与redirect无关 (我们可以假设目标URL是固定的)。

例如:

... app.get('/click', function(req, res, next) { // capture some incoming data var ua = req.get('User-Agent'); var ip = (req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress; // redirect res.redirect(302,"http://www.google.com"); // heavy processing on incoming processData(ua, ip); }); ... 

是的,没关系,假设processData是asynchronous的,几乎可以肯定的是,避免阻塞Express服务器。 随着您的系统扩展,您应该考虑切换到将processData函数分派到队列中,以便可以由其他计算机处理。 看看http://learnboost.github.io/kue/和https://github.com/resque/resque

你可以做到这一点,它和后期使用“setTimeout”类似。

 "Node.js" is single threaded 

但是你必须记住单线程的“Node.js”。 所以这个操作“processData(ua,ip)”可能会阻止来自相同或不同HTTP客户端的后续请求 。 如果“processData(ua,ip)”不包含任何文件,networking,数据库或任何端口读/写操作,那么无法获得非阻塞IO的优势。 所以即使你的方法在当地环境下运作良好,也不适合生产。

 Alternate way 

所以要做繁重的过程,用你的input创buildsubprocess并让它完成。 更好的是,你必须尽可能地减less你的主进程(即监听进程)的工作量。