流星穿线风格澄清

问题描述:

流星的文档状态:流星穿线风格澄清

流星,你的服务器代码在每个请求单个线程上运行,而不是在异步回调风格的典型节点的

他们真的意思?

A)在服务器运行在并行多线程(其Node.js的生态系统内似乎是不寻常)

B)但仍只一个事件触发服务器和每个请求中的单个线程按顺序处理,至少直到它调用服务器外部的资源为止 - 就像数据存储一样,此时服务器本身在处理其他请求时处理回调,因此您不必自己编写/管理回调。

布拉德,你的B是正确的。

流星在内部使用fibers。正如你所说,在一个服务器中只有一个线程,但是当你读取数据库(例如)时,Fibers的收益率和控制权会迅速回到事件循环。所以,你的代码看起来像:

doc = MyCollection.findOne(id); 

(有一个隐藏的“产量事件循环,回来当文档是在这里”),而不是在纤维版

MyCollection.findOne(id, function (err, doc) { 
    if (err) 
    handle(err); 
    process(doc); 
}); 

错误处理也只是使用标准的JavaScript异常,而不是每次都需要检查一个参数。

我认为这导致了一种更简单的代码风格,用于阅读业务逻辑,这些业务逻辑需要采取一系列相互依赖的操作。但是,如果您想使用异步风格,大多数Meteor的同步API可选择使用回调并变为异步。

+3

流星文档中的这个措辞可以真正用到澄清。这听起来像是他们采取的一种非常好的方法,但措辞让我怀疑这是在真正的引擎盖下发生了什么。 – 2013-10-13 20:33:56

+0

有没有计划在单独的线程中处理请求? – trusktr 2015-03-30 20:49:43