mmmries

mmmries

I have a phoenix project which acts as a public interface to a nerves powered device. As part of the UI the user can request for things be turned on. The phoenix client library has a nice way to send a “request” and await a response. I’m wondering if the same thing can be down from the server.

Can I push a message to a client with a uniq ID and wait for some amount of time to hear back a response with that same ID? I can implement this myself by storing a socket assigns in the channel state, but I’ll have to handle all the logic around timeouts and other edge cases myself.

Just wondering if other people have done this sort of interaction before where they want to send some data down to a channel client and then wait for the client to respond.

Showing Posts 1 to 9

acrolink

acrolink

I have the same question. Is it possible to send a message to a connected user and wait to receive a response back? I simply want the client to report ping time to some 3rd party server.

jjcarstens

jjcarstens

Nerves Core Team

I recently added this to one of our internal projects. I basically use a GenServer to handle the requests and store the ID. You interact via GenServer.call with a timeout. The initial request just saves the reference and the “from” reference in state and each incoming message to the server checks if that reference exists then does GenServer.reply to the “from” address.

Kind of a weird explanation. I’ll build a little code example in a bit and post that up (on mobile right now)

jjcarstens

jjcarstens

Nerves Core Team

K, I built a little example that you can run and see my idea for implementation. As a bonus, it also handles timeout waiting for a client response and making synchronous requests in a multi-node systems.

Take a gander and hopefully it sparks some ideas.

acrolink

acrolink

@jjcarstens

Thank you very much. I appreciate this, I will surely inspect it :slight_smile:
I have always heard of GenServer, maybe it is time now to start using it.

LostKobrakai

LostKobrakai

Can‘t you use the ref handling of phoenix channel messages instead of using a different channel for the response?

jjcarstens

jjcarstens

Nerves Core Team

@LostKobrakai you know…you probably can as long as you can keep it, and return to the caller, and handle timeouts.

This sample was adapted from some of our internal code where the messaging systems is MQTT and queued messages so I didn’t have the nice luxuries of Phoenix channels.

acrolink

acrolink

Do you know of any online tutorial on that?

LostKobrakai

LostKobrakai

Nope. I just know that messages in phoenix channels have a ˋrefˋ field, which afaik is used to track responses for messages initiated by the client.

entone

entone

The WAMP protocol supports this out of the box, everyone is a peer that can register procedures. I’ve been working on a client and server in Elixir. Worth checking out the protocol for some ideas.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews