Comment utiliser des événements de serveur HTML5

Comment utiliser des événements de serveur HTML5

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 utilisant Sudo 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