Check of iemand offline is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sure Is

Sure Is

15/12/2011 21:16:04
Quote Anchor link
Hallo iedereen,

Ik heb een simpel scriptje gemaakt om na te gaan of iemand online/offline is.
In feite komt het gewoon hier op neer:
Elke 1 second maak ik (via jQuery) een ajaxcall naar online.php.

Online.php ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$query
= mysql_query('select name from users where online="1"');
$dn = mysql_num_rows($query);

if($dn == 0)
{

    $return['status'] = 'Offline';
}


else{
$return['status'] = 'Online';
}


echo json_encode($return);
?>


Dit werkt allemaal perfect. Wanneer iemand inlogt, schrijf ik in de database bij "online" 1, en door de ajax-calls verschijnt er dan de boodschap "Online".

Probleem:
Ik wil ook weten wanneer de user van online naar offline gaat. Offline kan betekenen "internet viel uit" of "sloot browser" of "is uitgelogd".

Indien de user uitlogt, is er geen probleem: dan schrijf ik gewoon 0 in de database.
Maar hoe kan ik dit verwezelijken voor de andere twee gevallen?
Als de internetconnectie uitvalt, of de user sluit de browsers, zou er dus 0 moeten geschreven worden, alleen heb ik geen idee hoe ik dit kan doen...?

Alle tips zijn welkom!

Bedankt!
Gewijzigd op 15/12/2011 21:16:27 door Sure Is
 
PHP hulp

PHP hulp

19/04/2024 22:48:13
 
- SanThe -

- SanThe -

15/12/2011 21:19:21
Quote Anchor link
Tijdlimiet instellen. Bepaalde tijd geen actie is uitloggen.
 
- Ariën  -
Beheerder

- Ariën -

15/12/2011 21:19:29
Quote Anchor link
Waarom geen timeout gebruiken?
Gewoon de huidige tijd opslaan, en als die na 5 minuten niet niet veranderd is, op offline tonen (d.m.v. een functie).
 
Erwin H

Erwin H

15/12/2011 21:32:11
Quote Anchor link
Sorry, maar ik vind je script een beetje vreemd, als ik het zeggen mag.

Je query selecteert all records uit users die online zijn:
select name from users where online="1"

Dan check je hoeveel rijen je terugkrijgt:
$dn = mysql_num_rows($query);

En vervolgens zeg je dat als er 0 rijen uit je database terugkomen dat de user offline is? En als er meer dan 0 rijen uit de database komen dat de user online is.
if($dn == 0){
$return['status'] = 'Offline';
} else {
$return['status'] = 'Online';
}

Dus wat je weergeeft is of er nul mensen online zijn, of dat er 1 of meer mensen online zijn. Is dat inderdaad wat je wilt bereiken? Zo las ik je uitleg namelijk niet.
Overigens, als dat inderdaad je bedoeling is (kan natuurlijk), dan kan je een simpeler sql statement gebuiken met een count zodat je maar een rij terugkrijgt (met een aantal mensen dat online is) en niet potentieel duizenden rijen.
 
- Ariën  -
Beheerder

- Ariën -

15/12/2011 21:37:27
Quote Anchor link
Sure Is op 15/12/2011 21:16:04:
Probleem:
Ik wil ook weten wanneer de user van online naar offline gaat. Offline kan betekenen "internet viel uit" of "sloot browser" of "is uitgelogd".

met PHP zal dit never nooit lukken, je moet constant gaan pollen, en dan zou je waarschijnlijk iets met Flash moeten gaan gebruiken, als je het op zijn best wilt doen.

SetInterval() in JavaScript kan ook, maar als je elke (paar) seconde een poll doet, gaat je server dat niet echt leuk vinden gok ik zomaar.
 
F Loogman

F Loogman

15/12/2011 22:04:18
Quote Anchor link
Hi, je moet leunen op Javascript om zoiets te realiseren. Ik zou overigens niet per seconde pollen, maar (hooguit) per minuut. Het javascript event waar je naar zoekt bij het van je website gaan is .unload() (zie http://api.jquery.com/unload/). Er zitten meerdere haken en ogen aan je vraag, en de bottom-line is dat wat je wil eigenlijk niet goed kan met behulp van een browser en je de online/offline status daarom alleen (per tijdsinterval) kunt benaderen. Zoals SanThe al aangaf.
Gewijzigd op 15/12/2011 23:43:42 door F Loogman
 
Sure Is

Sure Is

15/12/2011 23:34:40
Quote Anchor link
Bedankt allemaal van de antwoorden.

Ik denk dat ik het inderdaad met een tijdslimiet ga doen.

Ik heb echter een nieuwe vraag: een paar mensen raden mij aan niet elke second te pollen omdat de server zo te zwaar belast wordt.
Voor die online/offline is dat idd niet nodig, maar ik wil dit implementeren in een online multiplayer 4-op-een-rij-spel. Om de "moves" van de spelers te detecteren gebruik ik ook jquery die via ajax polt of de andere reeds iets gedaan heeft. Dit moet uiteraard snel omdat er anders onnodige pauzes vallen. Ik pol nu om de halve second.

Is dit echt te belastend? Hoe kan ik het anders dan doen? Een voorbeeld: sommige sites tonen de laatste updates van Twitter in real-time, dus ik vermoed dat die toch ook héél erg veel de server pollen? (Goed, Twitter's server zal hier vast wel tegen kunnen maar dat even buiten beschouwing gelaten...)

Bedankt!

@Erwin: dat is inderdaad niet wat ik wil bereiken, maar ik had het even zo geschreven om het simpel te houden :).
Gewijzigd op 15/12/2011 23:35:31 door Sure Is
 
F Loogman

F Loogman

16/12/2011 00:20:27
Quote Anchor link
Als je dit zonder database zou kunnen doen is er vrijwel geen enkel bezwaar tegen het zwaar pollen van je webserver. Je hebt bijvoorbeeld memcache, maar dat is wellicht niet beschikbaar op standaard PHP webservers.

Je kunt ook denken aan opslag in een bestandssysteem, dat is ook snel. Je zou kunnen overwegen om een spelstatus als multidimensionale array te serialiseren en de md5 daarvan in een bestand met het spel-id te stoppen.

Wachtende gebruikers kunnen dan hun laatst bekende status (md5) in een cookie meegeven. Pas als de cookie waarde afwijkt van de meest recente md5 uit het bestand (let op: lees even read-only), moet het wijzigde spel ergens opgehaald worden, en daarna zijn zij aan zet.

Gebruikers die een wijziging doen posten hun spel (ajax natuurlijk), en krijgen als resultaat een nieuw md5 in een cookie (md5 tevens weggeschreven in bestand met het spel-id). Zij zijn daarna weer wachtende gebruiker.

Zoiets. Let op dat request/cookie < filesystemtoegang < sessie < database als het gaat om snelheid. En hoe minder je het systeem belast, hoe minder erg het is om vaak te pollen.
Gewijzigd op 16/12/2011 00:30:02 door F Loogman
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.