我有一个应用程序,它使用Express作为我的REST API的面向用户的框架,以及RabbitMQ,用于对集群后端的类似RPC的函数调用。另外,我使用Q来宣传路由中的所有工作量。
在我使用的其中一个路由中,我触发了一些功能,这些功能可以抓取路由参数中指定的URL,进行GeoIP查找,规范化结果格式等。这可能需要几秒钟,具体取决于已爬网URL服务器的响应时间。
我想要实现的是,POST新网址以进行抓取的用户会立即获得对其请求的反馈(状态200 ="抓取请求已确认"),并且没有请求等待爬行完成。
我的想法是
解决这个问题的最佳解决方案是什么?感谢您的宝贵意见。
答案 0 :(得分:3)
一个非常负载的问题有很多选项,每个选项都对整个系统有自己的影响。不确定是否有正确的答案。这真的是一个偏好的问题和你感到舒服的事情。 IMO,我试着保持简单。添加另一个进程(RabbitMQ)意味着另一个软件包(甚至整个服务器)来管理,配置,许可和保护。
要考虑的一些事项。您的处理I / O大部分是绑定的还是CPU绑定的?如果您使用远程服务进行GeoIP查找,则可能更多I / O限制,这对于节点来说是完美的。为什么节点只通过以下方式处理所有内容:
process.nextTick(function() {
// Do your lookup here
}
res.status(201).end();
然后使用像socket.io之类的东西将结果异步发送到客户端?
无论哪种方式,我建议您返回202 - Accepted,而不是200.