Voir utilisateurs qui sont en train de lire un sujet (en direct)

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, j'ai quelques questions svp. Sur un forum, je souhaiterai afficher en direct les utilisateurs qui sont en train de lire un sujet. Exemple: dans la liste des questions, en dessous du titre de chaque sujet, je souhaite afficher en direct la liste des utilisateurs qui sont en train de lire cette question.

Je veux que ce soit en direct (sans avoir à actualiser la page).

Que me conseillez-vous svp ?

Je crois que ceci est possible en Node JS, mais je souhaiterai éviter d'utiliser Node JS. J'aimerai savoir ce que je peut aller regarder du coté PHP. Merci beaucoup.

+0 -3
Staff

En gros il te faut un script de rafraîchissement asynchrone coté client. En gros tu va avoir dans le javascript de ta page un code qui va demander/recevoir les modifications et va afficher le résultat en modifiant la page. C'est ce qu'on a tendance à appeler "Ajax" même si le terme est aujourd'hui un peu flou.

Coté serveur, en PHP, tu peux très bien (j'imagine) créer une route qui renvoie les nouvelles informations à chaque demande de ton script coté client.

+2 -0
Staff

Oui mais tout dépend du niveau de compatibilité que tu veux. Après, sérieusement, je ne suis pas surs que les présence sur un forum nécessite un rafraîchissement en temps réel. Un toutes les quelques secondes est probablement suffisant d'autant que la "présence" est une mesure peu fiable.

+0 -0
Staff

Je suis pas convaincu par ton message Kje, pour plusieurs raisons :

  1. Le support des websockets est presque universel. Seul Opera Mini fait défaut. Toutes les versions maintenues des autres navigateurs ont les websockets. Si elles n'étaient pas aussi bien adoptées, Google, Facebook, Twitter, Microsoft et consors n'en flanqueraient pas partout.
  2. La plupart des bibliothèques websocket qui se partagent 95% des parts de marché fallback vers du long-polling si les websockets sont pas dispo dans le navigateur. Utiliser une de ces lib permet donc 100% de compatibilité.
  3. Ne pas exploiter les websockets quand elles sont présentes est un vrai problème. Imagine 1000 visiteurs qui passent 3 minutes sur ton site et qui poll les présences chaque 5 secondes. C'est une charge serveur considérable en comparaison à 950 websockets ouvertes et 50 personnes qui pollent parce qu'elles n'ont pas de websockets.

Vraiment, en 2016, y'a pas de bonne raison de pas implémenter de websockets. Si la compatibilité vous inquiète, utilisez une lib qui fallback sur du polling. Mais ne vous privez pas des websockets pour autant, c'est pas une bonne idée.

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+2 -0
Staff

Ha mais je suis d'accord qu'il faut l'utiliser. Il reste pas mal de boite avec des proxy a-la-con qui tue les websocket, un fallback me semble encore nécessaire. Mon message était probablement un peu trop brutal j'avoue.

+0 -0

Tu peux t'amuser à implémenter le système de PING/PONG du protocole IRC, avec des websockets, ça serait rigolo. Pour le langage côté serveur, on s'en fout un peu que ce soit du PHP ou du Node. Prends ce que tu veux.
Le point délicat ici, à mon avis, serait en fait la problématique du stockage (et plutôt prompt aux updates fréquents) du nombre d'utilisateurs lisant un sujet. Variable globale ? Base de données ? (si oui, la même que celle qui stocke le sujet du forum, ou un système dédié à cela ?). Je pense que c'est cette partie qui nécessite plus de réflexion.
Quelle technos utilises-tu pour le moment ?

Edit: orthographe.

Édité par Au

+0 -1
Staff

Pour le langage côté serveur, on s'en fout un peu que ce soit du PHP ou du Node. Prends ce que tu veux.

Non. PHP est stateless. HTTP est stateless. Les websockets sont stateful.

Tu peux utiliser un truc genre Ratchet, mais ça rend pas PHP stateful. C'est juste un hack un peu moche.

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+1 -1

Tu ne penses pas qu'implémenter un petit système de ping/pong ça le ferait avec Ratchet ?
Dans l'idéal, sinon, oui vaut mieux ne pas utiliser PHP pour ça, mais si l'OP connaît déjà ce langage et qu'il n'a pas spécialement envie d'utiliser ou apprendre autre chose, ça devrait le faire.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte