2013-11-01 34 views
1

我目前使用節點光纖編寫同步服務器端代碼。我主要通過try-catch塊進行錯誤處理,但總是有可能在外部庫或其他一小撮異步代碼中發生錯誤。我正在考慮使用新的域功能來嘗試將這些錯誤路由到正確的請求,並且我想知道是否有人嘗試在同一應用中使用光纖和域。節點光纖是否會破壞節點域?

根據域在幕後工作的方式,我可以想象光纖可能會破壞用於將異步代碼與正確域相關聯的一些假設。具體而言,我很擔心域可能會做類似下面的跟蹤上下文,這可能與纖維斷裂,因爲纖維分解函數將任何其他代碼之前運行完成的保證運行:

run_in_domain = function(to_run) { 
    var old_domain = global_domain; 
    global_domain = new_domain(); 
    try { 
     to_run(); 
    } finally { 
     global_domain = old_domain; 
    } 
} 

有沒有人成功或失敗地試圖讓光纖和域一起玩?

回答

2

我寫了一篇關於節點域如何工作的文章。 How Node Domains Work

基本上它們的工作原理與process.on('uncaughtException')類似。

我可以看到,節點光纖的作者聲明,您可以使用process.on('uncaughtException')來處理節點光纖異常,所以不應該有問題。請參閱Handling Uncaught Exceptions in a Fiber

+0

謝謝,這是一篇關於域的好文章。實際上,閱讀它會得出相反的結論,纖維可能會弄亂域名。如果你在代碼中的domain.enter()和domain.exit()和你的fiber.yield()之間有代碼,我猜你輸出的光纖將在該域下運行。 – josh

+0

呃,實際上你可能可以通過在切換光纖時顯式調用domain.enter()和domain.exit()來使它們兼容... – josh

+0

如果有用的話,請不要忘記將我的答案投票,或者將其標記爲您收到的最佳答案。如果有更好的答案,您可以隨時更改它。 – Sudsy

相關問題