Comments (4)
There are a couple issues going in this case. First, the fastlaning from the channel side, and next the %Phoenix.Socket.Broadcast{}
struct that is sent as part of channel broadcasts. Both will cause another node to not be happy receiving a message since the Channel/Socket
code is not loaded. It's not as simple as extracting this code out because if we take a step back and look at our system, we will need something sitting between the incoming pubsub messages and our channel client messages. Some ideas around how to better solve this than you starting your own intercepting server(s) that subscribe to topics and relay messages started with this POC PR:
https://github.com/phoenixframework/phoenix_pubsub/pull/34/files
Meanwhile, we have an ongoing effort to rewrite Phoenix.PubSub (https://github.com/phoenixframework/firenest) as a distributed tooling library, part of which handles pubsub. We took the lessons learned here and solved them with a configurable "dispatcher" that can both handle fastlaning and intercepting messages. This would allow each node to handle message delivery differently on each side without an extra process in between.
So the answer today for Phoenix.PubSub is to have a process on the channel side receiving messages and converting those messages into local broadcasts that channel clients understand. This may seem like a lot of work, but it makes sense when you have a remote node broadcasting some data, most likely in a form that's not tailored to consumption by remote browser clients. So we have channel_app <-> elixir_app
messages with rich data, and the channel app side converts whatever subset of messages into local channel broadcasts as it receives them. This becomes less work and more efficient in firenest, but it's still a work in progress so expect changes if you hop on board. Hope that helps clear things up!
from phoenix_pubsub.
As a simple fix, could the fastlane handler be configured per client, and not once? That was when my nonphoenix client subscribes, it looks up the fastlane when the message is received, rather than having the sender supply it...
from phoenix_pubsub.
As a simple fix, could the fastlane handler be configured per client, and not once?
That's what we do in firenest :) It's a bigger refactor to make this change on Phoenix.PubSub, especially since we are moving towards firenest for the future
from phoenix_pubsub.
How close is firenest to being mostly usable? I'm writing a course, and although a trivial roll-your-own pubsub is probably 50 loc, I'd really prefer not to reinvent the wheel.
from phoenix_pubsub.
Related Issues (20)
- Network traffic up for 20 minutes after a server restart
- Release v1.1.3 suppressing warnings HOT 1
- Where is version 2.0? HOT 1
- It may be helpful for users, if parallel option can be provided when starting Registry. Without it partitions in registry executes sequentially. HOT 1
- unknown registry: XXX.PubSub HOT 4
- RFC: Provide a way to mass update presences HOT 1
- topic forced to be string HOT 1
- Race condition causing data inconsistency when nodes are coming up
- Does Phoenix.PubSub itself support subscribing to wildcard topics? HOT 1
- PubSub registry fails to start or race condition when testing? HOT 3
- [Feature Request] Be able to transform a module into a Pub.Sub HOT 6
- Unsubscribe all HOT 2
- v2.1 and v2.0 are incompatible
- Odd Jason Encoding error after new release HOT 2
- Broken Build Status link
- Presence list keep growing when using Presence.update HOT 3
- Presence stops working after ~1 week HOT 5
- Politely request release of 2.1.4
- Tracker: join/leave within broadcast_period unclear in handle_diff/2 HOT 5
- RFC: expose erlang pg's scope ability for Phoenix.PubSub.PG2 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phoenix_pubsub.