J'écris une application Erlang qui nécessite d'interroger activement certaines ressources distantes, et je veux que le processus qui fait l'interrogation s'insère dans les arborescences de supervision OTP et prenne en charge toutes les fonctionnalités standard telles que la terminaison correcte, le rechargement de code, etc ...Y at-il un comportement Erlang qui peut agir seul au lieu d'attendre d'être appelé?
Toutefois, les deux comportements par défaut, gen_server
et gen_fsm
semblent uniquement prendre en charge l'opération basée sur les rappels. En faisant gen_server
pour faire cela par des appels à soi-même ou abuser gen_fsm
en ayant un seul état qui se boucle toujours avec un timeout 0, mais je ne suis pas sûr que ce soit sûr (ie n'épuise pas la pile ou accumule les messages non lus La boîte aux lettres).
Je pourrais faire mon processus dans un special process et écrire tout ce qui me manipule, mais cela me fait effectivement réimplémenter l'équivalent d'Erlang de la roue.
Y a-t-il un comportement pour du code comme celui-ci?
loop(State) ->
do_stuff(State), % without waiting to be called
loop(NewState).
Et sinon, est-il un moyen sûr pour tromper les comportements par défaut en faisant cela sans épuiser la pile ou l'accumulation de messages au fil du temps ou quelque chose?