You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Publish/Subscribe utility module that frees your business logic processes from the burden of communication.
Getting Started
Add :pubsub as a dependency to your mix.exs file:
defpdepsdo[{:pubsub,"~> 1.0"}]end
Then run mix deps.get in your shell to fetch the dependencies.
Examples
Assuming your client process looks like this:
defmoduleClientdodefstart(client_name)dospawn(fn->loop(client_name)end)enddefloop(name)doreceivedomessage->IO.puts"#{name} received `#{message}`"loop(name)endendend
With PubSub you can do this:
iex(1)>{topic1,topic2}={:erlang,:elixir}{:erlang,:elixir}iex(2)>{:ok,pid}=PubSub.start_link(){:ok,#PID<0.99.0>}iex(3)>{pid1,pid2,pid3} =
...(3)> {...(3)>Client.start("John"),...(3)>Client.start("Nick"),...(3)>Client.start("Tim")
...(3)> }{#PID<0.106.0>, #PID<0.107.0>, #PID<0.108.0>}iex(4)>PubSub.subscribe(pid1,topic1):okiex(5)>PubSub.subscribe(pid2,topic1):ok
iex(6)>PubSub.subscribe(pid3,topic2):okiex(7)>PubSub.publish(topic1,"#{topic1} is great!")"Nick received `erlang is great!`""John received `erlang is great!`":okiex(8)>PubSub.publish(topic2,"#{topic2} is so cool, dude")"Tim received `elixir is so cool, dude`":ok