Popularity
5.7
Stable
Activity
3.6
-
67
5
11

Monthly Downloads: 558
Programming language: Elixir
License: MIT License
Tags: Utilities    

pubsub alternatives and similar packages

Based on the "Utilities" category.
Alternatively, view pubsub alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of pubsub or a related project?

Add another 'Utilities' Package

README

Elixir Publish/Subscribe

Build Status Coverage Status Hex package Documentation Total Downloads

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:

defp deps do
  [
    {:pubsub, "~> 1.0"}
  ]
end

Then run mix deps.get in your shell to fetch the dependencies.

Examples

Assuming your client process looks like this:

defmodule Client do

  def start(client_name) do
    spawn(fn -> loop(client_name) end)
  end

  def loop(name) do
    receive do
      message ->
        IO.puts "#{name} received `#{message}`"
        loop(name)
    end
  end

end

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)
:ok
iex(5)> PubSub.subscribe(pid2, topic1)
:ok
iex(6)> PubSub.subscribe(pid3, topic2)
:ok

iex(7)> PubSub.publish(topic1, "#{topic1} is great!")
"Nick received `erlang is great!`"
"John received `erlang is great!`"
:ok

iex(8)> PubSub.publish(topic2, "#{topic2} is so cool, dude")
"Tim received `elixir is so cool, dude`"
:ok

API Reference

https://hexdocs.pm/pubsub/PubSub.html