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

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
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
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews