Online, offline státusz eldöntése
Szeretném jelölni, hogy valaki épp online, vagy offline.
Az addig egyszerű, hogy ha belép, akkor a státuszát updatelem online-ra, és ha megnyomja a kilépés gombot, akkor offline update.
De azt hogy szokták megoldani, hogy valaki pl 10 perce inaktív (és le is jár a sessionja), akkor a rendszer elmentse, hogy már offline?
Köszi.
■ Az addig egyszerű, hogy ha belép, akkor a státuszát updatelem online-ra, és ha megnyomja a kilépés gombot, akkor offline update.
De azt hogy szokták megoldani, hogy valaki pl 10 perce inaktív (és le is jár a sessionja), akkor a rendszer elmentse, hogy már offline?
Köszi.
Nem tudom most hogy megy,
Amúgy érdekes itt elgondolkodni olyan dolgokon is, hogy mi van akkor, ha valakinek több munkamenete van egyszerre, mert akkor ha az egyikből kilép, akkor inaktívnak jelöli majd a rendszer úgy is, hogy a többi munkamenet még él.
Boolean helyett integer
Boolean helyett egész számot kell megadni. Ha belép inkrementálni, ha kilép dekrementálni kell. Mivel számból minden igaz ami nem nulla, így csak igen szerencsétlen csillagzat alatt mehet félre valami. Mert ugye tudjuk, hogy bármi ami elromolhat, az előbb-utóbb el is fog romlani. :)
A legegyszerűbb megoldás, ha
Tehát minden felhasználónak,
És milyen gyakran értékeljem ki minden felhasználó utolsó_aktivitás értékét?
A php nem csak akkor fut le, ha egy kliens meghívja az oldalt? szóval magátol az a szerveren nem tud semmit csinálni. Szóval az ellenőrzéshez is egy felhasználó aktivitás kell.
Hány felhasználóra számítasz
A második kérdést meg nem értem. Akkor értékeled ki, amikor kíváncsi vagy rá, hogy ki van online. Egy boolean flag sem csinál semmit önmagában az adatbázisban, ha nincs lekérdezve valami miatt.
SELECT foo FROM user WHERE last_active > :threshold
* Ha egyáltalán kell plusz egy update, és nem lehet része egy amúgy is futó update-nek. Vagy mondjuk ha az adatbázisod már amúgy is tartalmaz infót az aktív munkamenetekről, akkor csak lekérdezed, hogy kinek van aktív munkamenete.
Pont ezért nem csinálják a
Miért ne?
A megvalósítás módját leginkább a felhasználáshoz érdemes igazítani, attól függ, mikor és mire kell neked ez az adat, egyszerre mennyi felhasználóé, stb.
Endyl megoldása valóban a legegyszerűbb, érdemes abból kiindulni, vagy ha további információkra is szükséged van, mint pl egy chaten, hogy "éppen gépel..." és hasonlók, akkor websocket. A témaindító alapján viszont inkább ez a last_activity irány elég lehet.
Lehet, hogy könnyebb lenne, ha írnál példát rá, mire kellenek a vélhetően online felhasználók.
- http request ("ha egy kliens meghívja")
- parancssorból (
php /path/to/my/script.php paraméter1 paraméter2
)- cron job (ugyanaz, mint parancssor, csak időzítva)
- folyamatosan futó (pl websocket, RabbitMq feldolgozó)
Itt is az a kérdés, hogy mi a feladat, és az ahhoz legoptimálisabb futtatási módot keresni.