2010-09-28 21 views
6

Uczę się node.js i większość przykładów, które mogę znaleźć, ma do czynienia z prostymi przykładami. Jestem bardziej zainteresowany budowaniem skomplikowanych systemów w świecie rzeczywistym i szacowaniem, jak dobrze model oparty na zdarzeniach node.js może obsłużyć wszystkie przypadki użycia prawdziwej aplikacji.Czy istnieje ogólny mechanizm limitu czasu zdarzeń w pliku node.js?

Jednym z typowych wzorców, które chcę zastosować, jest zezwolenie na wykonanie blokady do limitu czasu, jeśli nie nastąpi w określonym czasie. Na przykład, jeśli wykonanie zapytania bazy danych zajmie więcej niż 30 sekund, może to być za dużo dla określonej aplikacji. Lub, jeśli odczyt pliku trwa dłużej niż 10 sekund.

Dla mnie idealny przepływ programu z limitami czasu byłby podobny do przepływu programu z wyjątkami. Jeśli zdarzenie nie pojawi się w określonym wcześniej zdefiniowanym limicie czasu, to detektor zdarzeń zostanie usunięty z pętli zdarzeń, a zamiast tego zostanie wygenerowane zdarzenie timeout. To wydarzenie może mieć alternatywnego słuchacza. Jeśli zdarzenie jest obsługiwane normalnie, wówczas zarówno detektor czasu, jak i detektor zdarzeń są usuwane z pętli zdarzeń.

Czy istnieje ogólny mechanizm obsługi limitu czasu i czyszczenia przekroczonych limitów czasowych procesów? Wiem, że niektóre typy, takie jak socket, mają parametr timeout, ale nie jest to ogólny mechanizm, który ma zastosowanie do wszystkich zdarzeń.

Odpowiedz

1

Nie ma nic takiego w tej chwili (wiem, ale nie wiem wszystkiego).

Jedyne o czym mogę pomyśleć to to, że jakoś to zresetowałeś. Podałem przykład poniżej, ale myślę, że może mieć pewne problemy z zasięgiem. Powinien jednak być możliwy do rozwiązania.

var to 
function cb() { 
    clearTimeout(to) 
    // do stuff 
} 
function cbcb() { 
    cb() 
} 
function cancel() { 
    cb = function() {} // notice empty 
} 
fs.doSomethingAsync(file, cbcb) 
to = setTimeout(cancel, 10000) 
Powiązane problemy