acrolink

acrolink

Tracking online users using Phoenix sockets and Presence?

I want to use Phoenix sockets and presence to track users who are currently connected to the Internet (from within an Android application). Is there any online tutorial explaining how to do this? Code sample? Thank you.

Most Liked

kokolegorille

kokolegorille

Everything is done automaticaly, Presence will detect disconnection as well…

This is a simple code I put in my channels

  def join("schedule", _params, socket) do
    send(self(), :after_join)
    {:ok, socket}
  end

  def handle_info(:after_join, socket) do
    user = socket.assigns.user
    {:ok, _} = Presence.track(socket, user.id, %{
      username: user.name,
      online_at: System.system_time(:second)
    })
    push(socket, "presence_state", Presence.list(socket))
    {:noreply, socket}
  end

It does imply the socket is assigned to a user, for this, i extract user from a phoenix token.

You also need a client library supporting Phoenix websocket and channels.

And this library needs to be compliant with the Phoenix version.

kokolegorille

kokolegorille

I cannot tell for the Android client, but using the JS client, it’s almost instantly, when working on my dev machine… Which client do You use?

kokolegorille

kokolegorille

I think it’s not compatible with Phoenix 1.4 (driver is too old)

Last Post!

kokolegorille

kokolegorille

Yes, but I know it’s not possible to use old Phoenix JS with new version, it does not work… I think it’s the same for the Java client.

I had to write a driver for ReasonML, because using the previous was not working.

Where Next?

Popular in Questions Top

electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New

Other popular topics Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New

We're in Beta

About us Mission Statement