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

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

如果我使用Node.js,我还需要一个队列吗? 我可以在node.js中asynchronous执行所有重要的东西吗?

如果你正在举重,你可能需要一个队列。

关于node.js的性质的事情是有一个事件队列,并且(大多数情况下)一次只有一个事件正在进行。

关于node.js的好处在于很多库代码是asynchronous的 – 例如,数据库驱动程序会向数据库发出请求,然后在节点事件循环中发生其他事情。 因此,您可以在等待数据库返回给您时处理新的传入请求。

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

所以,如果你正在做一些“大”的事情,你会想把它转储到一个事件队列中,所以你不要阻塞主循环。

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

我在node.js上写的白皮书中介绍了这些阻塞的东西。 它也涵盖了其他的东西,但asynchronous部分有很多来自社区和最佳实践的链接,因为我理解这些东西

由于您在服务器应用程序之外进行繁重的工作,因此不会阻塞服务器。

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