2016-12-28 16 views
6

Czy istnieje sposób nawiązania połączenia w pliku Node.js w celu określenia liczby timerów w kolejce pętli zdarzeń? Mam bibliotekę z kilkoma limitami czasu i zamiast śledzić je samemu, używając jakiegoś wewnętrznego systemu księgowego, byłoby miło, gdybym mógł po prostu zapytać V8 lub Libuv, czy cokolwiek, ile tam jest zegarów.Uzyskaj liczbę (aktywnych) liczników czasu w pętli zdarzeń Node.js

Czy to możliwe?

+2

Czy sądzisz, że nadpisanie metody setTimeout za pomocą opakowania, które obsługuje licznik, odpowiada Twoim potrzebom? –

+2

@DavidRissatoCruz, które mogą działać, tak, chociaż musisz też dodać monkeypatch clearTimeout –

Odpowiedz

2

byłoby miło, gdybym mógł po prostu poprosić V8 lub Libuv lub cokolwiek

Nie można bezpośrednio zapytać libuv, ale z pewnością jest sposobem, aby wiedzieć, ile aktywnych czasomierze są tam.
Aby to zrobić, możesz wywołać uv_walk z poprawną pętlą, aby uzyskać wszystkie aktywne uchwyty. Następnie możesz sprawdzić każdy uchwyt z danym wywołaniem zwrotnym i policzyć te, dla których element danych type (który ma typ uv_handle_type) jest równy UV_TIMER.
Wynikiem jest liczba aktywnych timerów.

Więcej informacji na temat struktury danych uchwytów można znaleźć w dokumencie documentation.


Jako trywialny przykład rozważmy następującą strukturę:

struct Counter { 
    static int count; 

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

można go używać jak to następująco:

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

Oczywiście, to nie jest kod produkcji gotowych . W każdym razie, mam nadzieję, że da to pojęcie proponowanego rozwiązania.


Zobacz dokumentację libuv w dokumencie here.

Powiązane problemy