节点的JS工作人员 – 任何需要他们?

原谅我的无知,但来自Django / Python的背景,我可以看到有一个Celery队列在后台较慢的过程中工作,同时尽可能快地更新Web界面的巨大好处。

但是,在Nodeasynchronous工作的情况下,队列系统的用例是否会大大减less呢?

例如:

1 – 用户向网站发帖,2 – 网站回应,然后邮寄给pipe理员。

在Django中,您将发送pipe理邮件到任务,稍后执行,然后响应请求。 芹菜在后台发送邮件。

在节点中,你打电话给你的邮件,然后回应请求。 然后邮件发送一个回叫说或不,用户已经看到这个回应。

那么,为什么我会用Node的队列呢? 我在猜测什么时候事情比这更复杂 – 似乎对于交易邮件这样的微不足道的事情来说,这是没有必要的。

还是我误解它是如何工作的?

你是对的,节点的延续是相当不错的,如果你在一个节点进程中运行所有的东西,那么就不需要一个队列。 但是,由于节点是单线程的,当它忙于发送该电子邮件或处理该任务时,节点将无法处理任何新的传入请求(如果这是一个cpu密集型任务)

因此,如果你的任务需要一些时间来处理CPU明智的,它可能仍然是值得的使用外部队列和一个单独的进程来处理这些任务/消息。 如果你的任务是密集型的,需要一段时间,因为他们正在等待来自其他服务器的响应,那么节点再也不需要再次处理io了。

如果你有一个cpu密集型任务,但你不想部署一个队列,你可以创build更多的节点进程和机器实例,并在它们之间进行负载平衡,所有这些都可以让他们处理这些任务。 这种方法的缺点是你不能单独扩展网站和后台处理。 (例如,处理Web请求的5个实例和2个工作者实例)

不,总是有用例排队,即使在节点世界。 我见过几个人使用不同程度的成功的基本方法是使用Redis支持的队列来存储消息或任务。 您可能有一个Node进程将项目添加到队列,另一个Node实例处理来自队列的项目。 另外,请看一下队列模块的节点模块列表,你会看到相当多的实现。