在Node.js事件循环中获取(活动)计时器的计数



有没有办法在node.js中进行呼叫以确定事件循环队列中的计时器数?我有一个有很多超时的库,而不是使用某种内部簿记系统自己跟踪它们,而是很好,如果我只能问V8或libuv或其他任何东西,有多少个计时器,那就太好了。

这是可能的吗?

如果我只能问V8或libuv或任何其他

您不能直接问libuv ,但它肯定提供了一种方法来知道那里有多少个活动计时。
为此,您可以使用有效的循环调用uv_walk来获取所有活动的手柄。然后,您可以使用给定的回调检查每个句柄,并计算数据成员type(具有uv_handle_type类型)等于UV_TIMER的那些。
结果是活动计时器的数量。

有关手柄数据结构的更多详细信息,请参见文档。


作为一个微不足道的例子,请考虑以下结构:

struct Counter {
    static int count;
    static void callback(uv_handle_t* handle, void*) {
        if(handle.type == uv_handle_type::UV_TIMER) count++;
    }
};

您可以按照以下方式使用它:

Counter::count = 0;
uv_walk(my_loop_ptr, &Counter::callback);
// Counter::count indicates how many active timers are running on the loop

当然,这不是生产准备就绪的代码。无论如何,我希望它对拟议的解决方案有一个想法。


请参阅此处的Libuv文档。

最新更新