2012-08-02 54 views
19

流星的文檔狀態:流星穿線風格澄清

流星,你的服務器代碼在每個請求單個線程上運行,而不是在異步回調風格的典型節點的

他們真的意思?

A)在服務器運行在並行多線程(其Node.js的生態系統內似乎是不尋常)

B)但仍只一個事件觸發服務器和每個請求中的單個線程按順序處理,至少直到它調用服務器外部的資源爲止 - 就像數據存儲一樣,此時服務器本身在處理其他請求時處理回調,因此您不必自己編寫/管理回調。

回答

12

布拉德,你的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