axelson
Scenic Core Team
Is it possible to dynamically choose the Phoenix Channel that a client joins? I know in the UserSocket you can use channel "room:*", MyApp.RoomChannel and then treat the different suffixes to room: differently, but all the sessions will be directly connected to MyApp.RoomChannel.
My main issue right now is am trying to load a different channel depending on the mobile client version that is connecting. And a difficulty that I forsee trying to set different intercepts for each channel.
Trending in Questions
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
Hello,
I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind.
However, when I launch mix phx.server, I get an error...
New
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
Hello folks!
So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
How Can I Optimise Compile Time Dependencies
I have been building an elixir application for about 2 years now. Many modules and files ha...
New
I’m working on a small exercise involving update_in/3, and I came up with this solution:
data = %{
name: "Periodic Table",
category:...
New
Other Trending Topics
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with.
But I don’t use it anymore.
Serverless was the promis...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #ai
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #metaprogramming











Showing Posts 1 to 5- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
idi527
How many version do you expect? Is
channel "v1:room:*", MyApp.V1.RoomChannelout of the question?axelson
It’s not completely out of the question, but I was hoping to split off the old client into it’s own channel while keeping the channel name as-is. However I am completely unable to change the old client.
I guess I could bifurcate at the
UserSocketlevel intoUserSocketandUserSocketOldClientbut I’d prefer to do it at the channel level if I can.idi527
So it seems like the macros like
channel "v1:room:*", MyApp.V1.RoomChannelgenerate a bunch of__channel__/1functions which are then called here phoenix/lib/phoenix/socket.ex at v1.4 · phoenixframework/phoenix · GitHub.Maybe you could call
Phoenix.Channel.Server.join/4with the proper channel module “manually” somewhere? One way (maybe after a PR, unless there is a better way) would probably be the ability to provide a callback function todef handle_in(nil, %{event: "phx_join", ...likeon_joinwhich would receive the socket, opts, and some other params and return{channel, opts}instead of__channel__.chrismccord
The easiest answer is to have your RoomChannel simply delegate to other modules with the client specific callbacks, except you want to intercept, which only works here by unnecessarily intercepting some messages in either channel. So ask yourself if you really need intercepting. In many cases, the client can filter messages for example. Worst case, you Desktop and Mobile room channel modules just
push(socket, event, payload)on the intercepted messages that they don’t care about intercepting.axelson
While it looks like that approach would work, unfortunately
Phoenix.Channel.Serveris not part of the public API so I wouldn’t want to use that in production.Maybe a PR could be created that would modify
Phoenix.Socket.channel/3to optionally accept a function as the second argument (instead of the Channel Module). The function would take in thesocketand return the Channel Module. I actually quite like that approach.