2016-06-25 6 views
1

Bei Verwendung von simple_one_to_one in einem Supervisor wurden die Kinder nicht automatisch gestartet. In den Beispielen sollte ich supervisor:start_child(chat_liason_sup, DataForChild). starten, um ein Kind zu starten. In der realen Welt wollen wir die erlang-Anwendung ausführen und nicht an der Konsole sitzen, um ein Kind zu starten. Wie kann ich mindestens ein Kind automatisch starten lassen? Ein Trick, den ich in Betracht gezogen hatte, war, eine normale one_for_one zur gleichen Zeit gestartet zu haben, die wiederum die simple_one_for_one Kinder starten würde. Aber es sieht aus wie ich nur eine Art von Kind in einem bestimmten Supervisor starten kann ...Automatisches Erstellen von Kindern mit simple_one_to_one

Antwort

0

Wenn Sie mehr als eine Art von Kind starten möchten, verwenden Sie nicht simple_one_for_one. supervisor:start_child/2 akzeptiert child_spec() für andere Arten von Supervisor. Wenn Sie Child automatisch starten möchten, verwenden Sie einen anderen Prozess und mehr als einen Supervisor. Eine Möglichkeit besteht darin, einen Supervisor für einen Launcher und einen zweiten simple_one_for_one Supervisor für Kinder zu verwenden. Sie können jedoch so viele Supervisoren verwenden, wie Sie möchten.

1

Ich benutze die simple_one_for_one Strategie, wenn ich eine Prozessfabrik brauche. Im Allgemeinen habe ich eine erste Supervisor eine one_for_one oder one_for_all Strategie und deren Kinder

  • ein Server verantwortlich für einen Teil der Anwendung, und deren Aufgabe umfasst den Start mehrerer und identische Prozesse
  • die simple_one_for_one Supervisor.

Dabei nutze ich die OTP, um den Lebenszyklus aller Prozesse zu verwalten.