Wie erstelle ich einen Event Emitter mit Elixir, dem otp Weg

8

Was ist der beste Weg im Elixier, um einen Vordergrundprozess zu erstellen, der in jeder gegebenen Zeit tickt?

Mein Hauptproblem ist ein Ansatz wie:

%Vor%

funktioniert, ist aber vom Design her falsch. Es tippt definitiv nicht jede Sekunde, aber jede Sekunde PLUS die Zeit für do_something () zu vervollständigen. Ich könnte einen Prozess erstellen, um das "Etwas" zu behandeln, aber es gibt immer noch eine kleine Verzögerung.

Außerdem versuche ich, eine Mix-App zu erstellen, an der einige GenServer beteiligt sind und ein Hauptprozeß im Vordergrund (den ich hier frage), der die Server alle x Sekunden aufrufen soll. Gibt es eine Möglichkeit, dies zu tun?

    
matteosister 14.07.2015, 14:57
quelle

1 Antwort

13

Ich denke, timer:apply_interval/4 sollte Ihren Bedürfnissen entsprechen. Es wird etwa so verwendet:

%Vor%

Die Argumente in der Reihenfolge sind das Intervall, ein Modulname, die aufzurufende Funktion und die Argumente, mit denen sie aufgerufen werden sollen. Dann können Sie Nachrichten an Ihre GenServers innerhalb dieser Funktion senden. Sehen Sie sich die vollständige Dokumentation hier an: apply_interval / 4

Eine andere Sache, die Sie beachten sollten, ist, dass wenn Ihre tick -Funktion immer nur einfache Nachrichten an einige GenServers sendet, dann ist es wahrscheinlich extrem schnell, so dass Ihre Implementierung in Ordnung sein könnte a Task und in den Überwachungsbaum gesteckt (wenn Sie sich nicht um die mögliche leichte Drift kümmern).

    
Paweł Obrok 14.07.2015, 15:16
quelle

Tags und Links