如果我使用node.js,我还需要队列服务吗?

时间:2011-12-09 03:53:40

标签: javascript node.js queue

之前,当我使用Django时,我需要一个队列来在幕后做很多事情。 (可能需要1秒或更长时间,点击数据库,请求等)。

如果我使用Node.js,我还需要队列吗?我可以异步地在node.js中完成所有繁重的工作吗?

2 个答案:

答案 0 :(得分:1)

如果你正在进行繁重的工作,你可能需要一个队列。

关于node.js本质的事情是,有一个事件队列,并且(大多数情况下)一次只有一件事情发生。

node.js的好处是很多库代码是异步的 - 例如,你的数据库驱动程序会向数据库发出请求,然后让其他东西在节点事件中发生环。因此,您可以在等待数据库返回给您的同时处理新的传入请求。

node.js的坏处是你的代码也不得不担心阻塞事件队列。因为大型操作(计算或同步数据库调用)意味着您的node.js应用程序不提供任何传入请求。

所以,如果您正在做某事" big",您将要将其转储到事件队列中,这样您就不会阻止主循环。

除了计算之类的东西之外,我甚至会说你想排队的东西,你不知道可能需要多长时间。例如,我最近的一个项目是Ruby on Rails中基于状态的工作流应用程序。当状态对象改变状态时,将调用任意数量的函数来推动工作流。在node.js中,我会将这些状态转换排队,因为我不知道随着应用程序的开发和业务为应用程序添加新功能,许多函数将被添加到状态转换回调中。

我在white-paper I wrote on node.js中涵盖了相当多的阻止内容。它也涵盖了其他内容,但异步部分有很多来自社区和最佳实践的链接,因为我理解这些东西

答案 1 :(得分:0)

由于您在服务器应用程序外部执行繁重操作,因此不会阻止服务器。

如果您有越来越多的并发连接,稍后可能需要一个队列,因此您可以在进程之间分配工作。 Kue是一个很好的基于Node.js的队列。