节点光纤会破坏节点域吗?
Posted
技术标签:
【中文标题】节点光纤会破坏节点域吗?【英文标题】:Will node-fibers break node domains? 【发布时间】:2013-11-13 00:09:06 【问题描述】:我目前正在使用节点光纤来编写同步服务器端代码。我主要通过 try-catch 块进行错误处理,但在外部库或其他少量异步代码中总是有可能发生错误。我正在考虑使用新的域功能尝试将这些错误路由到正确的请求,我想知道是否有人尝试在同一个应用程序中使用纤程和域。
根据域在幕后的工作方式,我可以想象 Fiber 可能会破坏用于将异步代码与正确域相关联的一些假设。具体来说,我担心域可能会执行以下操作来跟踪上下文,这可能会与纤程中断,因为纤程破坏了函数将在任何其他代码运行之前运行完成的保证:
run_in_domain = function(to_run)
var old_domain = global_domain;
global_domain = new_domain();
try
to_run();
finally
global_domain = old_domain;
有没有人成功或不成功地尝试让纤程和域一起发挥作用?
【问题讨论】:
【参考方案1】:我写了一篇关于节点域如何工作的文章。 How Node Domains Work
基本上它们的工作方式类似于process.on('uncaughtException')
。
我可以看到 node-fibers 的作者说您可以使用process.on('uncaughtException')
来处理 node-fibers 的异常,所以应该没有问题。见Handling Uncaught Exceptions in a Fiber
【讨论】:
谢谢,这是一篇关于域的好文章。实际上,阅读它会得出相反的结论,即纤维可能会弄乱域。如果您在 domain.enter() 和 domain.exit() 之间有代码,并且您在该代码中的某个位置使用了 fiber.yield(),我猜您让出的 Fiber 将在该域下运行 好吧,实际上你可以通过在切换光纤时显式调用 domain.enter() 和 domain.exit() 使它们兼容... 如果我的答案有用,请不要忘记投票或将其标记为您收到的最佳答案。如果有更好的答案,您可以随时更改它。以上是关于节点光纤会破坏节点域吗?的主要内容,如果未能解决你的问题,请参考以下文章