2010-09-28 9 views
6

Ich lerne node.js und die meisten Beispiele, die ich finden kann, beschäftigen sich mit einfachen Beispielen. Ich bin mehr daran interessiert, komplizierte Systeme in der realen Welt zu bauen und abzuschätzen, wie gut das ereignisbasierte Modell von node.js alle Anwendungsfälle einer realen Anwendung bewältigen kann.Gibt es einen allgemeinen Mechanismus für Timeout-Ereignisse in node.js?

Eines der allgemeinen Muster, die ich anwenden möchte, ist die Blockierung der Ausführung auf Zeitlimit, wenn sie nicht innerhalb einer gewissen Timeout-Zeit auftritt. Wenn es zum Beispiel mehr als 30 Sekunden dauert, um eine Datenbankabfrage auszuführen, ist dies für bestimmte Anwendungen möglicherweise zu viel. Oder wenn es mehr als 10 Sekunden dauert, um eine Datei zu lesen.

Für mich wäre der ideale Programmablauf mit Timeouts ähnlich dem Programmablauf mit Ausnahmen. Wenn ein Ereignis nicht innerhalb einer bestimmten vordefinierten Zeitlimitgrenze auftritt, wird der Ereignis-Listener aus der Ereignisschleife gelöscht und stattdessen ein Zeitüberschreitungs-Ereignis generiert. Dieses Zeitüberschreitungs-Ereignis würde einen alternativen Listener haben. Wenn das Ereignis normal behandelt wird, werden sowohl der Zeitüberschreitungslistener als auch der Ereignislistener aus der Ereignisschleife gelöscht.

Gibt es einen allgemeinen Mechanismus für das Timeout-Handling und das Aufräumen von zeitgesteuerten Prozessen? Ich weiß, dass einige Typen wie Socket Timeout-Parameter haben, aber es ist kein allgemeiner Mechanismus, der für alle Ereignisse gilt.

Antwort

1

Es gibt nichts im Moment (das weiß ich, aber ich weiß nicht alles).

Das einzige, was mir einfällt ist, dass Sie es irgendwie selbst zurücksetzen. Ich habe unten ein Beispiel gegeben, aber ich denke, dass es einige Probleme mit dem Umfang haben kann. Sollte aber lösbar sein.

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) 
Verwandte Themen