在服务器上运行一个asynchronous的方法

我有一个meteor服务器方法,执行一个函数,我想在后台运行。 我希望服务器方法继续,而函数运行在不同的过程中。

方法:

myMethod: function(arg) { _event.emit("myEvent",args); ...do some other stuff } 

我希望服务器做其他的事情,并返回到客户端,并在后台执行_event.emit中的东西,没有结果必须发回客户端。

它目前所做的是在_event.emit中运行这些东西,然后返回到客户端。

我尝试通过在服务器端调用一个空的callback函数来解决这个问题,但这并没有办法

 myMethod: function (arg) { return Meteor.call("secondMethod", _.toArray(arg), function() {}) } secondMethod: function (arg) { _event.emit("myEvent",args); } 

希望有人知道这个解决scheme。 谢谢

nodejs中的javascript是单线程的。 它在一个事件队列中运行,其中一个事件从队列中popup,一些callback被调用来处理该事件,并且该callback后面的代码运行到完成,然后下一个事件被从事件队列中取出,重复该过程。

因此,没有真正的“后台处理”。 如果你的JS线程正在执行,那么当时没有别的东西可以运行,直到JS线程完成并且允许处理事件队列中的下一个事件。

为了真正地同时运行其他任务和其他nodejs代码可以同时运行的其他东西,必须创build一个新进程,让新进程执行任务。 这个新进程可以是任何types的进程(一些预build程序运行一个任务或另一个自定义nodejs进程)。

“在后台运行”有时可以通过对“后台”进程进行时间分割来模拟,以便在定时器时钟周期中执行less量的工作,定时器时钟之间的暂停可以处理其他nodejs JS事件并运行其代码。 但是,要做到这种types的模拟“背景”,你必须编写你的任务,以小块执行。 编写代码的方式是不同的(而且通常更麻烦)。

在服务器上,你可以使用Meteor.setTimeout()来asynchronous运行一个函数。 如果要立即返回控制,只需使用零的间隔。 您的主函数将继续运行,并且一旦事件队列中没有任何内容,计划的任务将运行(或等待您指定的时间量为非零值)。