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

Ale*_*lls 6 javascript v8 settimeout node.js libuv

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

这可能吗?

sky*_*ack 3

\n

如果我可以询问 V8 或 Libuv 或其他什么,那就太好了

\n
\n\n

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

\n\n

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

\n\n
\n\n

作为一个简单的示例,请考虑以下结构:

\n\n
struct Counter {\n    static int count;\n\n    static void callback(uv_handle_t*\xc2\xa0handle, void*) {\n        if(handle.type == uv_handle_type::UV_TIMER) count++;\n    }\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Counter::count = 0;\nuv_walk(my_loop_ptr, &Counter::callback);\n// Counter::count indicates how many active timers are running on the loop\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,这不是可用于生产的代码。无论如何,我希望它能够提供所提出的解决方案的想法。

\n\n
\n\n

请参阅此处获取 libuv 文档。

\n