Frage

Was ist ein guter Weg, Zustand zu anhalten, wenn ein abgestürztes Prozess neu zu starten?

Ich habe einen Supervisor in einer OTP-Anwendung, was mehr "Subsystem" gen_servers Uhren.

Zum Beispiel ist man ein „Wetter“ Subsystem, das einen neuen Wetterzustand alle 15 Minuten erzeugt und bearbeitet Anfragen für den aktuellen Zustand des Wetters. (Denken Sie das Limonadenstand Spiel)

Wenn das gen_server abstürzt, ich mag es neu gestartet werden, aber es sollte mit dem jüngsten Wetterzustand neu gestartet wird, wird nicht einig beliebiger Zustand in init() fest einprogrammiert. Es wäre nicht sinnvoll, für den Simulation Zustand plötzlich machen, um von „Hagelsturm“ auf „angenehm und luftig“ nur wegen des Absturzes.

Ich zögere Mnesia oder ETS zu verwenden, um den Zustand nach jeder Aktualisierung zu speichern wegen der zusätzlichen Komplexität; gibt es einen einfacheren Weg?

War es hilfreich?

Lösung

Solange es muss nur während der Laufzeit sein ein würde die Nutzung von ETS vorschlagen. Der Wert ist bei weitem größer als die Komplexität. Die API ist einfach, und wenn Sie mit dem Namen Tabellen arbeiten der Zugang ist zu einfach. Sie haben nur die Tabelle erstellen, bevor Sie Ihre gen_server vom Supervisor gestartet wird.

Zwei - komplexeren - Alternativen:

  • Erstellen Sie ein Paar von Prozessen, eine für die Arbeit zu tun, einen für den Zustand Wartung. Aufgrund der Einfachheit des zweiten wäre es wirklich zuverlässig sein.
  • Ein echter albern man könnte der Austausch des Kindes spec des Betreuers mit dem aktuellen Zustand als Argument jedes Mal, wenn der Zustand ändert. (Lächeln) Nein, nur ein Scherz.

Andere Tipps

  

gibt es einen einfacheren Weg?

, wenn Prozess es starb Nachricht an Supervisor sendet, den Zustand des Prozesses enthält, so können Sie diesen Wert verwenden, in Supervisor zu speichern (in Mnesia oder Vorgesetzten Zustand) und wenn der Server startet (in init ) es hat Sync-Aufruf an Supervisor sendet Staat Wert zu erhalten. Ich habe nicht reales Beispiel, aber ich hoffe, es macht Sinn.

Wie auch immer nicht wirklich sehe ich Problem Staat in Mnesia zu speichern.

Entschuldigung, mein Englisch:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top