1

Salut,

Je suis en train de bûcher sur un projet de kiosque, à base de Raspberry Pi.

L'idée est d'avoir une page HTML plein écran, avec des modules sur l'écran (avec Bootstrap). Ces modules, lorsqu'il y aurait des mises à jour sur le serveur (par exemple, le module météo), se mettront à jour automatiquement, sans que ça ne nécessite un rechargement de la page.

Je pense que la mise à jour aurait lieu toutes les minutes (environ, parce que certains modules d'info seraient plus actualisés), mais je me tâte :

- je sais faire des appels Ajax, je check si le compteur monte (dans un fichier par exemple) et s'il est monté, par Ajax toujours, je charge le nouveau HTML du bloc concerné. Avantage : aucune installation supplémentaire sur le serveur, type nodejs, ni de gros apprentissages pour moi.
- passer par une solution nodeJS, socket, que sais-je, qui crée un canal bidirectionnel, sur lequel je suis moins à l'aise...

Avez-vous déjà été confrontés à ces problématiques ? Connaissez-vous les risques qu'une page, chargée de 5/6 modules fasse genre jusqu'à une douzaine d'appels ajax par minute ?

Je ne sais pas si la demande est claire, mais l'idée est vraiment de rendre la chose la plus "soft" possible, sans refresh, donc, je ferai même de belles transitions en CSS avec des "ease" et "fade" pour que, lorsque l'info se met à jour, on soit dans l'impression d'un joli panneau, très classe.

Reste cette question de la manière de garder la page "à jour".
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

2

Ce n'est pas du "direct direct". Si tu n'es pas à l'aise sur Node, je dirais de rester sur Ajax. Ce n'est pas comme si tu avais besoin d'être à jour à la seconde près, comme pour un chat ou un jeu multijoueur en ligne.

À te lire par contre, je serais d'avis de partir sur un unique appel Ajax par minute. Il faudrait que l'appel contienne la liste de tous les modules chargés sur la page, interroge, et que le serveur renvoie une seule réponse (dans un JSON par ex) où le JS côté client va se charger de faire le tri et répartir les MAJ reçues dans le DOM.
Ajoutons à cela que je propose que l'appel soit fait par un compte à rebours perpétuel fixé sur l'instant où la page a été chargée, plutôt que quelque chose comme "chaque fois que l'heure atteint 0 seconde". Cela te permet de répartir les appels durant 60 secondes entre les différents visiteurs, plutôt que d'avoir tous les visiteurs qui lancent un appel en même temps chaque minute.

Un soucis potentiel cependant, par rapport au Node (qui, de mes quelques compétences, ne pose pas ce soucis structurel) est qu'il suffirait qu'un petit malin bidouille un peu le JS pour avoir un appel chaque seconde... mais avec un ID de session tu pourrais t'assurer que certains ne surchargent pas les demandes, sinon tu refuses leur demande de MAJ JS pendant une heure par ex.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

3

En gros, pour le moment, pour l'appel, c'est avec la fonction setInterval(), en JS.
Pas con du tout, en effet, le coup d'appeler UNE seule fois pour tous les modules. Cela dit, chaque module pourra être déplacé/supprimé/ajouté, selon la config de la personne... mais je pense qu'un simple appel peut donner s'il y a mise à jour (et depuis quand) sur tous les modules, même ceux non affichés, puis je parserai.

Merci pour l'idée, je n'y avais pas songé.
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

4

Un examen du DOM, après un document.ready, pourrait te permettre d'obtenir la liste des modules, par exemple en donnant aux modules des classes particulières pour les établir en tant que modules, et un attribut data-.

Par ex :<div class="module" data-module="ABC" data-module-type="actualités"> <!-- Contenu du module --> </div> <script> $(function() { var liste_modules = []; $('.module').each(function(index) { liste_module[index]['module'] = $(this).data('module'); liste_module[index]['module-type'] = $(this).data('module-type'); }); }); </script>
La liste des modules acquises, plus qu'à l'examiner pour savoir quels modules mettre à jour, plutôt que de faire la liste d'updates pour des modules non affichés smile
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

5

Impec top
Merci
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo