在meteor中如何在将第一部分数据返回给客户端之后保持服务器端计算

时间:2014-08-15 10:12:47

标签: meteor

Meteor的一个菜鸟甚至node.js. 我正在考虑一个简单的网络应用程序,并且非常喜欢流星的简单性。但我确实需要一些关于最佳用法的建议。

该应用程序的基本流程是:

  • 用户使用Google帐户登录
  • 该应用会抓取用户的Google数据,进行一些分析,保存到Mongo中,然后代表用户。

由于谷歌api对​​一次通话中可以返回多少数据的限制,并且分析可能很耗时,我想知道应用程序可以首先将部分数据返回给用户,同时保持提取和计算。准备好更多数据后,应用程序会将其他数据推送给用户。

我不知道在将部分结果响应给客户端后,在服务器端继续数据获取和计算的最佳做法是什么。我想我可以使用setInterval,但延迟值​​很难选择(因为它的变体),我希望下一个数据提取/处理块将等待当前的数据完成。 对不起,如果这是一个天真的问题,但您的建议非常感谢。

2 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,那么Meteor方面的事情就会照顾好自己。如果您将结果插入服务器上的MongoDB,并且您的客户正在订阅正确的数据(可能在他们的个人资料中,或者附加了_id个单独的文档,然后,只要插入新数据或修改现有数据,客户端就会自动更新。您只需要担心服务器上的问题。

所以问题实际上是获取,处理和定期存储数据的最有效方式是什么,并且不知道处理涉及什么,很难回答。

是否在一次获取中获取数据?如果没有,那么只需在每个批次完成后通过关联的get和store对分析进行排队。 分析是在循环中完成的吗?如果是这样,只需在每x个周期后存储数据。

基本上,如果处理足够艰巨,需要存储部分结果需要很长时间,那么必须有一种合理的方法来确定存储这些结果的最佳时间。一旦你这样做,Meteor将负责自动将更改发布给客户 - 客户不需要知道等待更新需要多长时间。

请注意,即使使用low-level publications API将结果存储在服务器数据库中,您也可以实际执行此操作,尽管它会更复杂一些。

答案 1 :(得分:0)

或者,您可以将一些任务外包给后台作业(即crons)。 synced-cron包对我们非常好:http://atmospherejs.com/package/synced-cron