获取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文档。