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

有没有办法在Node.js中调用来确定事件循环队列中的定时器的数量? 我有一个有很多超时的图书馆,而不是使用某种内部簿记系统来跟踪他们,如果我可以问V8或Libuv或其他什么,有多less个定时器,那将是很好的。

这可能吗?

如果我可以问V8或Libuv或者其他什么的,那将会很好

你不能直接询问libuv ,但它肯定提供了一种方法来知道有多less活动计时器。
要做到这一点,你可以用一个有效的循环来调用uv_walk来获得所有的活动句柄。 然后你可以用给定的callback函数检查每个句柄,并计算那些数据成员type (types为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 

当然,这不是一个生产就绪的代码。 无论如何,我希望它提出了一个build议的解决scheme的想法。


看到这里的libuv文档。