19

Meteor 的文档指出:

在 Meteor 中,您的服务器代码在每个请求中运行在一个线程中,而不是以 Node 典型的异步回调样式

他们真的是这个意思吗?

A)服务器并行运行多个线程(这在 Node.js 生态系统中似乎不寻常)

或者

B)事件服务器中仍然只有一个线程,并且每个请求都按顺序处理,至少直到它调用服务器外部的资源 - 例如数据存储,此时服务器本身正在处理回调,同时它处理其他请求,因此您不必自己编写/管理回调。

4

1 回答 1

12

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

Meteor 在内部使用纤维。正如您所说,事件服务器中只有一个线程,但是当您执行(例如)数据库读取时,Fibers 产生并控制迅速返回事件循环。所以你的代码看起来像:

doc = MyCollection.findOne(id);

(带有隐藏的“屈服于事件循环,当文档在这里时回来”)而不是

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

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

我认为这会导致更容易阅读业务逻辑的代码样式,该业务逻辑想要采取一系列相互依赖的操作。但是,如果您想使用异步样式,大多数 Meteor 的同步 API 都可以选择接受回调并变为异步。

于 2012-12-14T00:29:36.913 回答