J'ai remarqué en parcourant Stack Exchange qu'il y avait des notifications dynamiques comme "3 nouveaux messages, cliquez pour afficher". Je veux avoir ce genre de mise à jour dynamique pour ce que je vais expliquer.
Disons que je veux créer un carrousel/diaporama de 10 articles d'actualité récents. Je veux que ce carrousel soit mis à jour toutes les heures, dans une file d'attente. Les articles plus récents pousseront les articles plus anciens hors de la file d'attente. La solution du haut de ma tête serait.
Est-ce une stratégie acceptable? Puis-je y parvenir sans me fier aux demandes des clients? En d'autres termes, comment Stack Exchange réalise-t-il sa mise à jour dynamique?
Afin de transmettre des données, vous devez identifier un client, et cela se fera en abonnant le client au serveur. Une fois cela fait, vous aurez une liste de clients abonnés avec une connexion persistante.
Selon ce que vous voulez réaliser, je dirais qu'il est préférable que le client demande au serveur, afin que vous n'ayez pas à maintenir une connexion persistante et à utiliser des protocoles de communication de demande/réponse comme HTTP.
Un exemple qui vient à l'esprit pour maintenir une connexion persistante serait un système de messagerie instantanée/messagerie instantanée, car la communication devrait avoir lieu en temps réel.
Gardez à l'esprit que les connexions persistantes sont généralement implémentées via l'utilisation de sockets
, ce qui ajoute une superposition dans la mise en œuvre de votre propre protocole de communication, chiffrement, etc.
Fondamentalement, vous devez transmettre des données au client, et comme une communication bidirectionnelle ne fait pas partie du protocole http, il n'est pas facile de l'implémenter vous-même.
La solution de votre problème est socket.io
Comme l'indique son site Web,
"Socket.IO permet une communication événementielle bidirectionnelle en temps réel. Il fonctionne sur toutes les plateformes, navigateurs ou appareils, en se concentrant également sur la fiabilité et la vitesse."
J'espère que cela résoudra votre problème.
Je ne peux pas parler de la façon dont SE le fait, bien qu'il s'agisse d'un site Web, il existe plusieurs façons qui pourraient inclure un ensemble de tâches cron pour exécuter un script php/asp/what-have-you à l'heure de pousser les données. Mais ce serait le cas si vous recherchiez une solution Web uniquement.
Mais comme vous mentionnez un client, vous pouvez peut-être créer un fichier avec la date/l'heure de la dernière mise à jour de ce client et demander au client de vérifier la valeur stockée dans ledit fichier et de la comparer à l'heure système de l'utilisateur pour voir si une heure s'est écoulé depuis la dernière mise à jour. Si cela fait au moins une heure, le client demande le dernier flux de nouvelles à votre serveur qui renvoie ensuite le dernier flux de nouvelles au client.
J'éviterais d'utiliser un minuteur ou du moins d'utiliser un minuteur uniquement car cette méthode ne fonctionnerait que si l'utilisateur gardait le client ouvert pour que le minuteur fonctionne. Mais si vous avez (également) le fichier comme je l'ai suggéré, vous pouvez créer un sous-programme pour ouvrir le fichier, stocker l'heure dans une variable et la comparer à l'heure du système et faire la demande si cela fait au moins une heure. Ensuite, vous appelez simplement le sous-marin en relation avec certains événements. Je l'appellerais certainement lors du chargement du formulaire, car si l'utilisateur redémarre simplement son client, vous voudrez les dernières nouvelles. Si cela avait été quelques jours depuis qu'ils étaient sur le client, cela montrerait des nouvelles aussi anciennes. Attachez le moins possible ce sous à la charge du client et lancez le minuteur comme vous l'avez suggéré. Théoriquement, tant que l'utilisateur garde le client ouvert, le chronomètre continuera à faire son travail, puis vous avez le sous-cycle en charge lorsqu'il n'y a pas de chronomètre actif pour garder une trace du chronométrage.
Je m'excuse si j'ai mal compris ce que vous vouliez car je ne suis pas totalement certain de ce que vous cherchez. Mais j'espère que de toute façon, il y a quelque chose de valeur ici pour vous!