Comments (5)
Can you give more information? What exact diff are receiving in such cases?
Because of the above issue, when we had a hotspot restart its software, we would get a leave, followed immediately by a join all within the default 1500ms
This makes sense as the key did leave then rejoin. Your logic needs to consult the metadatas for the key to know if they have left from all devices, joined for the first time, etc. It's not clear from your description that something is wrong and sounds like it is working as expected.
For example here is the snippet from our js presence client with logic:
let presence = new Presence(channel)
// detect if user has joined for the 1st time or from another tab/device
presence.onJoin((id, current, newPres) => {
if(!current){
console.log("user has entered for the first time", newPres)
} else {
console.log("user additional presence", newPres)
}
})
// detect if user has left from all tabs/devices, or is still present
presence.onLeave((id, current, leftPres) => {
if(current.metas.length === 0){
console.log("user has left from all devices", leftPres)
} else {
console.log("user left from a device", leftPres)
}
})
from phoenix_pubsub.
Hey @chrismccord thanks for the speedy reply.
In my system the hotspots are devices running on OpenWRT so no browsers and no multiple connections for the same key.
The issue is that in the handle_diff/2
you get essentially 2 lists, one with the joins and one with those who have left.
But in our case when the software reconnects we have a leave, followed by a new join, but it could as well be a join with an immediate disconnect, we cannot see this. There is nothing to indicate in which order these have happened.
I don't know if this makes it more clear.
I had a conversation about it today on Slack (https://elixir-lang.slack.com/archives/C03QQCV4H/p1711540815449919).
from phoenix_pubsub.
BTW, I am not using Phoenix.Presence
, but Phoenix.Tracker
directly.
from phoenix_pubsub.
But in our case when the software reconnects we have a leave, followed by a new join, but it could as well be a join with an immediate disconnect, we cannot see this.
You can see this :)
The phx_ref
's in the diff uniquely identifies the items. A matching phx_ref in the joins and leaves for a given key necessarily means they joined and then left (your immediate disconnect scenario above). Likewise mismatched keys means one of the entries left, but a new one joined. Thanks!
from phoenix_pubsub.
Ah!
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
- 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.