2013-04-14 34 views
2

我的NodeJS项目有一些长时间运行的任务,我正在构建一个RESTful接口。在NodeJS中测试长时间运行的任务

我想测试一下,我的REST接口可以继续访问,在执行较长时间的运行任务时提供状态更新。

在多线程环境中,这很容易测试,因为您只需将一个线程休眠一段时间,因为您的HTTP控制器在另一个线程中运行。这显然是不可能在NodeJS(由于单线程):)

我可以将任务,但我怎么让存根“等待”一段时间没有阻塞线程,让我可以击中REST端点并获取状态更新?

回答

4

假设您指的是CPU绑定的长时间运行任务。

解决这个问题的最好方法是将CPU绑定任务发送到子进程。您可以使用child_process包。

随着child_process你可以产生新的进程,并通过管道与他们沟通。让你的孩子进程期待stdin上的数据并将结果写入标准输出。

当您的节点进程继续提供网络请求时,它可以在另一个进程中产生所有CPU绑定任务。

你也应该看看worker-farm包。

+0

简而言之,主节点进程中长时间运行的任务不是事件循环的朋友。 –

+0

工人农场拯救我的一天! TNX! – mimmuz