之前,当我使用Django时,我需要一个队列来在幕后做很多事情。 (可能需要1秒或更长时间,点击数据库,请求等)。
如果我使用Node.js,我还需要队列吗?我可以异步地在node.js中完成所有繁重的工作吗?
答案 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的队列。