流星穿线风格澄清
问题描述:
流星的文档状态:流星穿线风格澄清
流星,你的服务器代码在每个请求单个线程上运行,而不是在异步回调风格的典型节点的
他们真的意思?
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可选择使用回调并变为异步。
流星文档中的这个措辞可以真正用到澄清。这听起来像是他们采取的一种非常好的方法,但措辞让我怀疑这是在真正的引擎盖下发生了什么。 – 2013-10-13 20:33:56
有没有计划在单独的线程中处理请求? – trusktr 2015-03-30 20:49:43