Autor Zpráva
Dejv
Profil *
Dobrý den,

řeším to, jak zjišťovat online status uživatelů. Počítám s obnovováním nějakého souboru přes Ajax např. po 5s. Teď přemýšlím, jak ale evidovat, že uživatel je skutečně na stránce, např. nezavřel již okno. Ukládat tyto záznamy do db? Nechci ji příliš zatížit, předpokládám v budoucnu velkou aktivitu uživatelů.

V db eviduji zatím poslední příhlášení (unix time), poslední aktivu (příspěvek, unix time).

Hledám radu člověka, který něco takového realizoval, děkuji.

D.
aDAm
Profil
Co takhle při každém načtení stránky uživatelem udělat log jeho aktivity? a když je jeho aktivita delší než třeba 5min tak jej prohlásit za offline.
Str4wberry
Profil
Nejprve bych se zamyslel, zda je to přesné zjišťování vůbec potřebné. Často může stačit si při načtení stránky uživatelem uložit čas a s nějakou časovou tolerancí od tohoto momentu považovat uživatele za online.
Joker
Profil
Dejv:
Jestli to je tak jak je popsáno, „ping“ by určitě měl aktualizovat poslední aktivitu v databázi.

Případné výkonové problémy bych řešil v první řadě prodloužením toho intervalu „pingání“. Opravdu je nutné aktualizovat stav každých 5 sekund?
Už jen to, že by 20 lidí mělo web otevřený v prohlížeči a jinak nebudou nic dělat, by na serveru vyrobilo 240 požadavků za minutu. V typických aplikacích by podle mě byl dostačující interval i minuta, možná i několik minut, kdy bude množství požadavků na server řádově nižší.

Dodatek: A samozřejmě je dobré zvážit i možnost, kterou popisují kolegové výše: Jestli by nestačilo brát jako „online“ nějakou dobu od načtení poslední stránky.
Dejv
Profil *
Joker:
To je dobrý nápad. Minuta bude OK. Jde o to, že budu rozšiřovat možnost chatu a nechci aby nastala situace, kdy někomu píšu, odešlu a čekám dobu a pak zjistím, že už je 5 minut offline. O to jde.
aDAm
Profil
tak chaty se obecně řeší jinak že, tam ti jede na pozadí komunikace stále v nějakém intervalu.
Dejv
Profil *
aDAm:
Ano, tady to byli PM zprávy ale honěné AJAXEM.
Dejv
Profil *
Ještě jsem nedostal konkrétní odpověď. Jak zjistím, že uživatel zavřel okno? To je asi nejdůležitější akce, kterou bych chtěl ovlivňovat online status.
margin
Profil *
Události JavaScriptu onUnload
Z různých důvodů to není stoprocentní, třebas některé prohlížeče onunload neodesílají, někdo nechá stránku otevřenou, ale uspí OS...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0