你将如何做meteor的重处理?

我有一个meteor应用程序,目前正在从叽叽喳喳的数据,然后进行一些操作,然后将文件插入到一个集合。 比方说,我永远运行这个过程,但不想阻止事件循环,有没有解决scheme呢?

注意:我知道node.js是单线程的,meteor不支持集群等软件包,因为它需要粘性会话。 我能想到的唯一解决scheme是添加一个服务器,专门处理来自twitter的数据,并将请求转发到该服务器,但是我不再有案例使用meteor或节点。

帮助将不胜感激。

这里的事实是,虽然javascript / node / meteor可能能够处理,你自己真的不想这样做。 让我提出一些观察和一个个人的例子:

  • 你的应用程序是关于延迟。 如果您的某个请求需要很长时间才能完成,因为它被困在一个紧密的循环中,那么当前就会影响连接到您的服务器的所有其他客户端。 如果发生这种情况,每个人的延迟都会增加。 (这是确保您的代码中没有紧密循环的情况)
  • Javascript(语言)对数值有非常简单的支持。 (你基本上得到一个double )。 像floatlongintbyte这样的东西都是为了让你尽可能快地完成紧密的循环。 如果你可以用一个最接近它的原始types来表示一个值,你会得到很多改进。 (这是将数据处理提取为适合数据处理的语言的情况)

我原型化了一个必须对数据进行一些聚合的应用程序。 我使用setIntervalcallback在meteor中解雇了它,每次完成大约需要2秒钟的时间。 在我自己的开发机器上,我没有真正注意到它(因为meteor应用程序非常有效地隐藏延迟问题)。 只要我部署它,并开始查看日志,我意识到,没有一个用户有任何请求延迟4秒以下。 这是可怕的客户体验。

我提取了一个小clojure应用程序的数字嘎吱嘎吱。 所有的整合都是通过从mongo数据库中插入和读取的logging来实现的,clojure代码中的一些定时事件每隔几秒就会发生一次,就像以前在meteor中所做的一样。

在clojure这些calcs现在总共不到100ms(相比meteor2-4秒)。

回到你的问题:这听起来不像你的应用程序有一个用户界面? 如果是这样的话,你最好把它保存在meteor中,因为它非常适合用户界面。 但是这对于无头应用程序来说并不是正确的技术,这听起来对我来说就像你一样。

您可以在执行繁重处理的方法开始处使用this.unblock()。 meteor将会启动另一个光纤,继续处理你的方法,并在完成时触发callback。 更多信息在这里: http : //docs.meteor.com/#method_unblock