Comment utiliser des événements de serveur HTML5
- 1454
- 214
- Lucas Bernard
Objectif
Après avoir lu ce tutoriel, vous devriez être en mesure de comprendre et de profiter des événements HTML5 Server-Sent.
Exigences
- Aucune exigence particulière nécessaire
Conventions
- # - exige que la commande Linux soit exécutée avec des privilèges racine
directement en tant qu'utilisateur racine ou en utilisantSudo
commande - $ - Étant donné la commande Linux à exécuter en tant qu'utilisateur non privilégié régulier
Introduction
Les événements envoyés par serveur sont un Html5
technologie qui permet à un client de surveiller automatiquement les notifications d'événements à partir d'un serveur et de réagir au besoin. Cette technologie est très utile pour informer les événements en direct, pour mettre en œuvre, par exemple, une application de messagerie en direct ou un fil d'actualité. Dans ce tutoriel, nous verrons comment implémenter cette technologie à l'aide de PHP et JavaScript.
Un exemple simple
Pour le bien de ce tutoriel, nous travaillerons avec une liste des «animaux» qui seront affichés dans une page HTML simple. Alors que dans une application du monde réel, les données auraient été stockées et récupérées dans une base de données, dans ce cas, pour simplifier, nous utiliserons un tableau PHP. Ce que nous voulons obtenir, c'est une notification en temps réel des changements dans la liste des animaux, afin que nous puissions mettre à jour notre page HTML en conséquence, sans avoir à le rafraîchir.
Le code côté serveur
Pour commencer, peuples notre petite gamme d'animaux dans le animaux.php
Fichier (nous travaillons dans le répertoire racine de notre serveur Web VirtualHost):
Copie Enregistrer et fermer le fichier comme animaux.php
. Maintenant, pour la partie la plus importante: nous devons écrire le script qui émettra le message qui sera récemment utilisé par notre code JavaScript côté client. Avec beaucoup de fantaisie, nous nommerons le script scénario.php
. Le code est très simple, le voici:
Copie La première chose à remarquer ici est que nous avons appelé le entête
fonction dans les lignes 2-3: c'est une fonction utilisée pour envoyer En-têtes HTTP bruts
. Dans ce cas, nous l'appelons deux fois: le premier dans les lignes 2 pour configurer le Contrôle du cache
champ d'en-tête et spécifiez les directives de mise en cache (pas de mise en cache de page), la seconde dans les lignes 3, pour définir le Type de contenu
pour Texte / flux d'événements
. Ces en-têtes sont nécessaires pour que notre script fonctionne correctement. Il est également important de remarquer que pour fonctionner correctement, le entête
La fonction doit toujours être appelée avant toute autre sortie.
Après avoir configuré les en-têtes HTML, nous avons juste utilisé le Demandez une fois
instruction dans les lignes 6 pour exiger le contenu du animaux.php
fichier, qui contient le tableau que nous avons écrit avant. Dans un scénario réel, cela aurait été remplacé par un Requête SQL
Pour récupérer ces informations à partir d'une base de données.
Enfin dans les lignes 9-11, nous avons envoyé notre réponse au client: le encopté en JSON
Array «Animals». Une chose très importante à remarquer: le format des événements côté serveur nécessite que chaque réponse envoyée par le serveur soit préfixée par le données:
chaîne et suivi de deux personnages de Newline
. Dans ce cas, nous avons utilisé le \ n
Le personnage de Newline parce que nous fonctionnons sur une plate-forme de type Unix; Pour assurer la compatibilité multiplateforme, nous aurions utilisé le Php_eol
constant.
Il est même possible de briser le message de réponse sur plusieurs lignes: dans ce cas, chaque ligne, comme dit précédemment, doit commencer par «données», et doit être suivie d'un seul caractère Newline. La nouvelle ligne supplémentaire n'est requise que sur la dernière ligne.
Le serveur peut également contrôler la fréquence à laquelle le client doit essayer de se reconnecter (par défaut est 3
secondes), et le nom du événement
(par défaut est «message») envoyé au client. Pour personnaliser le premier, nous devons utiliser le recommencez
directive suivie de l'intervalle de temps souhaité, exprimé en millisecondes. Par exemple, pour configurer un intervalle de 1 seconde:
Echo "Retry: 1000 \ n";
Notez que même ici, une nouvelle ligne de traîne est requise. Pour changer le nom de l'événement, nous devons plutôt utiliser le événement
directif:
Echo "Event: Customevent \ n";
L'événement par défaut est «Message»: ceci est important car l'événement doit être spécifié dans le code JavaScript client lors de l'ajout de l'écouteur de l'événement, comme nous le verrons dans un instant.
Après avoir envoyé notre réponse, nous avons appelé le affleurer
Fonction: Ceci est nécessaire pour ouvrir les données au client.
Code côté client
La première chose que nous allons faire le côté client est de préparer notre fichier HTML avec la liste des animaux disponibles:
Copie C'est vraiment un HTML de base avec un peu de PHP pour afficher la liste des animaux au moment du chargement de la page et pour inclure notre .Fichier JS (script.js), mais servira notre objectif. Maintenant, voyons comment nous pouvons réellement utiliser les événements côté serveur. La première chose que nous devons faire est d'instancier un Objet source d'événement
. Dans notre fichier javascript, écrivez:
Laissez eventsource = new Eventsource ('script.php ');
Copie Comme vous pouvez le voir, nous avons passé le chemin d'accès à notre script de serveur comme argument dans le Eventsource
constructeur d'objets. Cet objet ouvrira une connexion au serveur. Maintenant, nous devons ajouter un auditeur d'événements
, afin que nous puissions effectuer certaines actions lorsqu'un message est reçu du serveur:
Laissez eventsource = new Eventsource ('script.php '); Eventsource.addEventListener ("message", fonction (événement) let data = json.analyse analyse (événement.données); Laissez les listes = document.getElementsByTagName ("li"); pour (soit i = 0; i < listElements.length; i++) let animal = listElements[i].textContent; if (!data.includes(animal)) listElements[i].style.color = "red"; );
Copie Lorsqu'un message est reçu, nous utilisons le Json.analyse
Méthode dans la ligne 4 pour transformer les données envoyées par le serveur (une chaîne, contenue dans le données
propriété de l'objet de l'événement), dans un tableau javascript.
Après cela, nous bouclent dans les lignes 7-11 à travers tous les éléments avec le Tag, qui sont les éléments de notre liste d'animaux: si un élément ne semble plus être dans le tableau envoyé par le serveur, la couleur du texte contenu dans la liste est changée en rouge, car «l'animal» n'est pas Plus longtemps disponible (une meilleure solution aurait été d'inclure uniquement le nom d'élément modifié ou manquant dans la réponse du serveur, mais notre objectif ici est de démontrer comment la technologie fonctionne). Le changement dans la page se produira en temps réel, donc pas besoin de se rafraîchir. Vous pouvez observer comment notre page tire parti des événements envoyés par serveur, dans la vidéo ci-dessous:
Comme vous pouvez le voir, dès que le «chat» est supprimé du tableau «animaux» (notre source de données), l'élément affiché dans la page HTML est modifié, pour refléter ce changement.
Le flux de données entre le serveur et le client peut être interrompu en utilisant le fermer
Méthode de la Eventsource
objet:
Eventsource.fermer()
Pour gérer la connexion ouvrir
, et erreur
événements, des auditeurs d'événements dédiés peuvent être ajoutés à l'objet.
Tutoriels Linux connexes:
- Choses à installer sur Ubuntu 20.04
- Comment envoyer des notifications de bureau à l'aide de notify-sens
- Comment gérer les événements ACPI sur Linux
- Comment créer une application Tkinter à l'aide d'un objet orienté…
- Une introduction à l'automatisation Linux, des outils et des techniques
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
- Commandes Linux de base
- Liste des clients FTP et installation sur Ubuntu 22.04 Linux…
- Téléchargement Linux CD / DVD en direct
- « Installez le firmware sans fil Intel sur Debian 7 Wheezy
- Crypter un lecteur avec Veracrypt en Linux »