Je crée un module serveur/client Elixir de base qui peut envoyer/recevoir des messages asynchrones. Le module ressemble à suivre. J'initie les processus à travers la console iex en utilisant.Elixir: comment envoyer une notification au serveur dans handle_cast?
{:ok, pid1} = Bitcoin.WorkerOne.start_link([])
Bitcoin.WorkerOne.get_message(pid1, ["one"])
Après ce qui précède, l'état passe à ['one'] (liste initialement vide). Je veux envoyer une notification au serveur que l'état a été mis à jour. Puis-je appeler 'Genserver.cast'
à l'intérieur du handle_cast
, afin de renvoyer un message?
En cas de handle_call, il attendra la fin de la tâche. Does' {: noreply, state} 'fonctionne-t-il autour de ça? – COSTA
L'utilisation des appels du client est importante lorsque vous avez besoin d'une réponse, ou d'une garantie que le serveur a reçu la demande et agit sur elle. Si vous renvoyez '{: noreply, state}', il est prévu que vous ayez déjà répondu ou que vous répondiez dans le futur en utilisant 'GenServer.reply/2'. Cela vous permet de contrôler quand les réponses sont envoyées tout en conservant les garanties fournies par les appels, y compris les délais d'attente et les plantages. L'appelant bloquera, mais vous pouvez répondre tôt pour minimiser cela, ou utiliser des lancers avec le pid du lanceur de sorts si la requête est vraiment tirée et oublie. – bitwalker