Liste des connectés

WRInaute occasionnel
Bonjour,
j'aurais aimé afficher la liste des connectés sur mon site (loggué via session PHP), comme par exemple sur ce forum :).
J'ai pensé à créer une table Connectés et à l'alimenter/mettre à jour à chaque changement de page.

Le problème c'est que cela multplie enormément les rêquetes sur la base (nombre de pages vues * nb connectés)

Y-a-t-il un moyen de moins solliciter la base pour connaitre les users ONline
 
WRInaute passionné
Un champ ip, un cham timestamp, un champ pseudo, a chaque chargement on supprime tous les enregistrements quand le timestanp est plus vieux que 15 minutes (par exemple), puis tu liste le nombre d'enregistrements, voir tu affiche les pseudo des connectés!
 
WRInaute occasionnel
c'est exactement ce que j'ai fait.
Le probleme c'est que si un user charge 30 pages a chaque visite, et qu'il y en a 50 users connectés en même temps, cela fait 30*50 = 1500 requetes sur la base en peu de temps, juste pour avoir la liste des connectés.

Cela ne fait-il pas trop de requetes supplémentaire ?
 
WRInaute passionné
Tu peux faire un system qui limitte le nombre de fois que la requete vas etre executé pour une visite.

Genre tu dis que si le nombre de seconde est impaire, on n'execute pas la requete, sinon on l'execute, ce qui fais une chance sur deux que la requete soit executé.

Et selon l'évolution de ton site, tu modifie un peu ce paramètres, de facon a trouver le juste milieu entre précision du system, et sollicitation du serveur sql.

Mais il y a d'autres moyen: travailler avec un fichier texte par exemple, ou tu regarde a chaque fois il y a combien de temps que le "nettoyage de la table" s'est fait....

Bref jamais de pb que des solutions
 
WRInaute discret
En effet zimounet à raison tu peux toujours stocker les info dans un fichier même si c'est moins pratique que la base de donnée mais en effet çà va aléger le nombre de requêtes ;)
Sinon tu mets un petit random pour ne pas enregistrer les changements de pages à tous les coups :)
 
WRInaute occasionnel
Travailler avec un fichier texte n'est pas forcément moins coûteux.
Vous placez 15 minutes comme laps de temps pour purger les visiteurs ?
Qu'elle est la valeur d'usage ? J'étais plutôt orienté sur une durée de 2 minutes pour obtenir une indication significative
 
WRInaute passionné
muelsaco a dit:
Sinon tu mets un petit random pour ne pas enregistrer les changements de pages à tous les coups :)

Ce qui reviens a se baser sur les secondes... lol

Sinon oui:
$var = srand(1,50);
if ($var==1)
{
//opération sql
}

Ce qui te fais une chance sur 5 pour 10 visiteurs simultanés(dans la pratique, c'est peut significatif) que ta page soit executé

Mais il est certains, qu'avec cette solution, plus tu as de visiteurs, plus tu ton compteurs de visiteurs simultanés (et ton afficheur de pseudo en ligne) sera précis, mais couteux en ressources SQL. Donc je plancherais plus sur le fichier texte ou alors sur les minutes ou sur les secondes, genre si la pages est chargé lorsque les secondes sont entre 55 et 60 secondes, on fais la requetes... Et si tu as vraiment beaucoup de visiteurs en meme temps, tu peut rétrécire ce temps, genre entre 58 et 60 secondes...

Cela dit, j'ai jamais eu besoin de mettre de tel trucs en place, une petite requete sur chaque page, ce n'est pas énorme quand on compare a un CMS ou il y a plus de 10 requetes par pages en moyenne...
 
WRInaute impliqué
zimounet a dit:
Cela dit, j'ai jamais eu besoin de mettre de tel trucs en place, une petite requete sur chaque page, ce n'est pas énorme quand on compare a un CMS ou il y a plus de 10 requetes par pages en moyenne...
C'est effectivement ce que j'allais dire.
A moins de vouloir l'afficher sur des pages qui en temps normal ne se connectent pas à la base, faire une petite requête d'update et une requête de selection, ca ne prend pas beaucoup de temps.
 
WRInaute occasionnel
Dans le cas ou il faut mettre à jour tout lse 2 minutes :
j'enregistre dans une variable de session le timestamp actuel à la connexion, et je teste cette variable à chaque page appelée.

si seulement time() > ($_SESSION['time'] + 120)
alors je met à jour ma table, et je reaffecte le timestamp actuel à $_SESSION['time']
 
Discussions similaires
Haut