2016-12-28 5 views
6

Node.jsでイベントループキューのタイマー数を判断する方法はありますか?私はいくつかの種類の内部簿記システムを使って、タイムアウトの数を持つライブラリを持っていて、V8やLibuvなど何かを尋ねることができればうれしいでしょう。Node.jsイベントループの(アクティブな)タイマーの数を取得

これは可能ですか?

+2

カウンタを管理するラッパーを使用してsetTimeoutメソッドを上書きすると、あなたのニーズに合っていると思いますか? –

+2

@DavidRissatoCruzでもうまくいくかもしれませんが、clearTimeoutも同様にmonkeypatchする必要があります –

答えて

2

私はちょうどあなたが直接 libuv求めることはできませんV8またはLibuvまたは何

を求めることができるが、それは確かにアクティブなタイマーがありますどのように多くの知っている方法を提供する場合、それはいいだろう。
有効なループを使用してuv_walkを呼び出して、アクティブなハンドルをすべて取得することができます。次に、指定されたコールバックで各ハンドルを確認し、データメンバtype(タイプがuv_handle_type)がUV_TIMERに等しいものを数えます。
結果はアクティブタイマーの数です。

ハンドルデータ構造の詳細については、documentationを参照してください。それは次のように

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のマニュアルについては、hereを参照してください。