anandgeorge

anandgeorge

LiveView server as subscriber to a PubSub service

Hi,

I have an implementation in which the backend is in two parts. One handles business logic and the other is a LiveView server.
The Business Logic publishes data at regular intervals over PubSub to multiple consumers including LiveView.
How do I set up my LiveView server to subscribe to this data.
I have evaluated handle_info in LiveView but it seems to be designed for sending updates to connected clients, not to handle subscription from another service.

Thanks.

Marked As Solved

Sebb

Sebb

When the live-view process subscribes to a topic (eg in mount) it should receive messages broadcasted to that topic in handle_info. handle_info in the live view process gets the live-socket as second argument.

Try a minimal example, if that still not works post it here.

Also Liked

dnsbty

dnsbty

I have a tutorial that shows you how to get PubSub and LiveView working together here: https://dennisbeatty.com/how-to-create-a-todo-list-with-phoenix-liveview/

But if you’ve already got the handle_info callback in place, you’ll probably just need to call Phoenix.PubSub.subscribe/2 in your live view’s init callback.

derek-zhou

derek-zhou

You need to make sure the subscribe is protected by connected?/1 as described here:
[Phoenix.LiveView — Phoenix LiveView v1.2.5]

Use connected?/1 to conditionally perform stateful work, such as subscribing to pubsub topics, sending messages, etc.

anandgeorge

anandgeorge

Sure. The issue was more conceptual.

Coming from a Javascript / Nodejs background I presumed that LiveView works like a server. So when I run iex -S mix phx.server it starts up the server, runs mount and configures it’s responses based on implementations of handle_event, handle_info etc. I was hoping to broadcast messages to clients that then connected. In short the server runs before a connection is made. I was therefore watching out for the subscription to run and get a log of the messages, which obviously didn’t happen.

As I can see LiveView spins up a process for each connection. Mount doesn’t run and therefore subscription doesn’t initiate till the client connects.

Once connected the subscription was initiated. There was a small issue with implementation of handle_info which logged an error. Corrected that and now it works.

Thanks once again.

Where Next?

Popular in Questions Top

_russellb
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lists...
New
JulienCorb
I am trying to implement my new.html.eex file to create new posts on my website. new.html.eex: <h1>Create Post</h1> <%= ...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: The documentation above suggests that while ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

Other popular topics Top

malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36128 110
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 47930 226
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

We're in Beta

About us Mission Statement