【问题标题】: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;
    }
}

有没有人成功或不成功地尝试让纤程和域一起发挥作用?

【问题讨论】:

    标签: node.js node-fibers node.js-domains


    【解决方案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() 使它们兼容...
    • 如果我的答案有用,请不要忘记投票或将其标记为您收到的最佳答案。如果有更好的答案,您可以随时更改它。
    猜你喜欢
    • 2012-07-26
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多