如何在Meteor应用程序中“分离”长时间运行的服务器端function?

作为meteor应用程序的一部分,我有一个服务器端,通过向集合的插入/更新获取信息的POST消息,以提供给Web客户端。 到现在为止还挺好。 但是,有时这些更新可能相当大(每5秒logging一次,每次50K)。 直到我开始使用批处理插入包,然后使用Mongo的低级batch.find.update()和batch.execute()时,我一直很难保持这种状态。

但是,即使有5万条logging,它仍然有大量的处理过程(它会进行一些计算,分析等)。 我会喜欢能够“线程”的逻辑,所以主事件循环可以继续下去。 但是,我不确定是否有真正简单的方法在Meteor中为此创build“真实”线程。 因此,我想知道至less“批量”工作的最佳/适当的方式,以便每N(例如1K左右)logging我可以释放事件循环回来处理其他事件(如某些客户端DDP消息等)。 然后做另一个1Klogging等等,直到无论我需要多lesslogging完成。

我在想,解决scheme在于使用Fibers / Futures(似乎是Meteor的方式),但是我不是正确的,或者像“setTimeout()”和/或“setImmediate()”这样的低级思想是正确的更合适。

TIA!

       

网上收集的解决方案 "如何在Meteor应用程序中“分离”长时间运行的服务器端function?"

meteor不是一个适合所有工具的尺寸。 我想你应该从你的批处理中分离你的meteor应用程序。 设置一个单独的meteor实例,或者更好地build立一个纯粹的node.js服务器来处理这些请求和批处理。 它看起来像这样:

mongo的更新将很快反映在meteor中。 我有类似的情况,并使用节点服务器做一些批量数据收集,然后将其传递到一个cassandra数据库。 然后我用拉丁语对这些数据进行一些批处理操作,然后插入到mongo中。 我的meteor应用程序会立即react native地显示新的数据。

您可以在服务器方法内调用this.unblock()以允许代码在后台运行,并立即从方法返回。 看下面的例子。

 Meteor.methods({ longMethod: function() { this.unblock(); Meteor._sleepForMs(1000 * 60 * 60); } });