Page web temps réel - Langages fonctionnels - Programmation
Marsh Posté le 18-02-2020 à 14:56:39
Je pense qu'ajax est plus indiqué (get de jquery, c'est du ajax ). Par contre, t'es pas obligé de faire toutes les secondes, je pense. Un timer toutes les 5s suffirait probablement. Y'a combien de personne dans ton bâtiment ?
Après, tu peux faire un truc plus subtile : un flag dans un champ de la BD qui indique que la situation a changé (état des pièces avec les personnes dedans). Dès qu'une MAJ est faite, ça passe à 1 ce flag. Ta page web, via ajax, va lire cette variable. Si elle est à 0, rien n'est mis à jour car pas de changement. Si elle est à 1, ajax récupère la liste des personnes/pièce et met à jour l'affichage puis passe à 0 le flag.
Du coup, dans un grand nb de cas, ton script ajax va juste récupérer un 0, donc charge très faible pour le réseau. Et dans les cas où le flax vaut 1, là, y'aura plus de données mais ça sera ponctuel j'imagine. Après, ça dépend du nb de personnes et du nb de pièces.
Pour être plus fin, tu peux faire un flag par pièce pour ne transférer que les personnes des pièces qui ont changé. Ca fait toujours une seule interrogation par ajax mais le script php, lui, en fonction des flags, va renvoyer par pièce qui a changé, la liste des personnes et javascript/ajax se débrouillera pour mettre à jour l'affichage. Pour le format des données, à voir si tu fais du json qu'il faudra parser et injecter dans ta page web en html ou si ton PHP te renvoie direct du html que tu n'auras plus qu'à injecter au bon endroit dans la page web.
Marsh Posté le 18-02-2020 à 15:03:37
Merci Rufo pour ton retour. Mes données seront renvoyées au format json, mais c'est pas le traitement de ces dernières qui va avoir beaucoup d'impact. Mon interrogation était effectivement plus sur la transaction client/serveur et tu as apporté une idée intéressante que je vais étudier
Marsh Posté le 18-02-2020 à 16:33:18
Ben la taille des données json, c'est pas à négliger, d'une part en terme de délai de transmission client/serveur (même si tu es en local, le LAN a un débit max, surtout si y'a des VLAN avec de la QoS), mais après, en terme de parsing et traitement à effectuer. Si t'as 10 noms de personnes ou t'en a 1000, ça va pas être le même délai. Du coup, si tu fais du polling toutes les secondes et que ton délai de transfert et traitement fait 1s ou plus, ton appli va vite être en galère avec une file de traitement qui va augmenter sans jamais se vider.
Marsh Posté le 18-02-2020 à 16:37:35
Pas d'impact car il s'agit au pire du pire de 40 lignes composées d'un nom, d'un prénom et d'un numéro.
Marsh Posté le 18-02-2020 à 19:48:57
Puisque c'est posté dans langages fonctionnels, j'aurais bien proposé Elixir + framework phoenix + phoenix_live_view mais j'imagine qu'il s'agit là d'une erreur vu les technos évoquées ?
Marsh Posté le 19-02-2020 à 08:06:45
Je ne connais ni l'un ni l'autre, et même si je suis toujours demandeur d'apprendre, j'ai peur que les contraintes imposés par le client ne me permettent pas de "maitriser" tout ça à temps
Mais au final l'idée que j'ai retenu est en partie en lien avec ton post puisque je vais m'orienter vers des websocket. Pourquoi cette solution ? Et bien simplement car la partie "badge" fonctionne sous Android. Je vais donc développer un applicatif qui se connecte au server socket (qui sera développé en php). Dès qu'un client badgera, j'enverrai l'info via le socket et elle sera automatiquement diffusée à tous les clients web.
Cette solution me paraît la plus simple et la plus accessible (pour moi tout du moins ).
Merci pour vos retours
Marsh Posté le 18-02-2020 à 14:19:16
Bonjour tout le monde
Pour un projet client, j'ai besoin de faire une page web (serveur local) sur laquelle sont référencées toutes les personnes présentes à un moment T dans des locaux, avec un chrono indiquant le temps de présence. Cette page pourra être consultée par plusieurs personnes en même temps.
Chaque personne "badgera", et aussitôt elle devra apparaître sur la page et le compteur sur la ligne correspondant se lancera. Dès qu'elle badgera à nouveau elle disparaîtra aussitôt.
J'ai pensé à plusieurs idées, mais j'ai peur que ça soit trop gourmand ou trop lourd ou pas adapté...
Qu'en pensez-vous ? Et vous, par quel bout prendriez-vous un tel projet ?
Merci pour vos retours