recherche
Maisondéveloppement back-endTutoriel PythonImplémentation d'événements envoyés par le serveur (SSE) avec Python et Go

Dans les applications Web interactives d'aujourd'hui, les mises à jour des données en temps réel sont cruciales pour améliorer l'expérience utilisateur. Parmi les diverses technologies de communication en temps réel, les événements envoyés par le serveur (SSE) se démarquent comme une solution simple mais efficace. SSE permet aux serveurs de transmettre des mises à jour en temps réel aux clients via HTTP.

Implementing Server-Sent Events (SSE) with Python and Go

Qu'est-ce que l'ESS ?

Les événements envoyés par le serveur (SSE) sont une technologie utilisée pour permettre au serveur de transmettre des données au client de manière proactive, également connue sous le nom de « flux d'événements ». Il est basé sur le protocole HTTP et profite de ses caractéristiques de connexion longue durée. SSE établit une connexion persistante entre le client et le serveur, permettant au serveur d'envoyer des mises à jour de données en temps réel au client. Cependant, le client ne peut pas renvoyer de données au serveur via SSE.

Pourquoi choisir ESS ?

Les événements envoyés par le serveur font partie de la spécification HTML5, spécialement conçue pour transmettre des événements du serveur au client. Sa simplicité, ses fonctionnalités de reconnexion automatique et de suivi des événements le rendent idéal pour les scénarios nécessitant un flux de données unidirectionnel. SSE fonctionne exceptionnellement bien lorsque les données sont diffusées dans une seule direction.

Aperçu

SSE permet au serveur de transmettre des messages au navigateur en temps réel. Dans le cadre de la spécification HTML5, cela implique :

  • Protocole de communication : Utilise HTTP.
  • Objets d'événement : Disponibles côté navigateur.

Bien que les WebSockets offrent également une communication en temps réel, ils diffèrent considérablement :

Feature SSE WebSockets
Protocol Basis HTTP TCP
Data Flow Unidirectional (server to client) Full-duplex (bidirectional)
Complexity Lightweight and simple More complex
Reconnection Built-in Manual implementation needed
Message Tracking Automatic Manual implementation needed
Data Types Text or Base64-encoded binary Various data types supported
Event Types Support Custom events supported Custom events not supported
Limitations HTTP/1.1 or HTTP/2 Unlimited connections

Implémentation du serveur

Mise en œuvre du protocole

Essentiellement, le navigateur initie une requête HTTP et le serveur répond avec un statut HTTP accompagné de ces en-têtes :

Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

SSE spécifie que le type MIME pour les flux d'événements doit être text/event-stream. Les navigateurs ne doivent pas mettre les données en cache et les connexions doivent rester persistantes (keep-alive).

Format des messages

Les flux d'événements utilisent du texte codé en UTF-8 ou des messages binaires codés en Base64 compressés avec gzip. Chaque message se compose d'un ou plusieurs champs, formatés comme nom de champ : valeur de champ. Chaque champ se termine par un n. Les lignes commençant par deux points sont des commentaires ignorés par le navigateur. Plusieurs messages dans un push sont séparés par des lignes vides (nn).

Les champs clés incluent :

  • event : Le type d'événement.
  • id : L'ID d'événement utilisé par le navigateur pour suivre le dernier événement reçu pour la reconnexion.
  • réessayer : Le temps d'attente (en ms) nécessaire au navigateur pour réessayer de se connecter après un échec.
  • données : Les données du message.

Exemple : SSE avec Python

Voici une implémentation utilisant Python :

from flask import Flask, Response

app = Flask(__name__)

@app.route('/events')
def sse_handler():
    def generate():
        paragraph = [
            "Hello, this is an example of a continuous text output.",
            "It contains multiple sentences, each of which will be sent to the client as an event.",
            "This is to simulate the functionality of Server-Sent Events (SSE).",
            "We can use this method to push real-time updates.",
            "End of sample text, thank you!",
        ]

        for sentence in paragraph:
            yield f"data: {sentence}\n\n"

            import time
            time.sleep(1)

    return Response(generate(), mimetype='text/event-stream')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8081, debug=True)

Exemple : SSE avec Go

Voici une implémentation utilisant Go :

package main

import (
    "fmt"
    "log"
    "net/http"
    "time"
)

func main() {
    http.HandleFunc("/events", sseHandler)

    fmt.Println("Starting server on :8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatalf("Server error: %v", err)
    }
}

func sseHandler(w http.ResponseWriter, r *http.Request) {
    flusher, ok := w.(http.Flusher)
    if !ok {
        http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "text/event-stream")
    w.Header().Set("Cache-Control", "no-cache")
    w.Header().Set("Connection", "keep-alive")

    paragraph := []string{
        "Hello, this is an example of a continuous text output.",
        "It contains multiple sentences, each of which will be sent to the client as an event.",
        "This is to simulate the functionality of Server-Sent Events (SSE).",
        "We can use this method to push real-time updates.",
        "End of sample text, thank you!",
    }

    for _, sentence := range paragraph {
        _, err := fmt.Fprintf(w, "data: %s\n\n", sentence)
        if err != nil {
            return
        }
        flusher.Flush()
        time.Sleep(1 * time.Second)
    }
}

API du navigateur

Côté client, l'API EventSource de JavaScript vous permet de créer un objet EventSource pour écouter les événements envoyés par le serveur. Une fois connecté, le serveur peut envoyer des messages d'événement au navigateur. Le navigateur gère ces messages en écoutant les événements onmessage, onopen et onerror.


<t>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemple SSE ?</title>
&Lt;/tête>
<corps>
    <h1 id="Exemple-d-événements-envoyés-par-le-serveur">Exemple d'événements envoyés par le serveur ?</h1>
    <div>



<h2>
  
  
  Outils de débogage SSE
</h2>

<p>Actuellement, de nombreux outils populaires tels que Postman, Insomnia, Bruno et ThunderClient ne disposent pas d'une prise en charge adéquate pour le débogage des événements envoyés par le serveur (SSE). Cette limitation peut être assez frustrante lors du développement. Heureusement, EchoAPI offre d'excellentes capacités de débogage SSE, améliorant considérablement l'efficacité et la productivité du flux de travail.</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173482771419125.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Implementing Server-Sent Events (SSE) with Python and Go"></p>

<p>Si vous travaillez avec le débogage SSE ou API, je vous recommande fortement d'essayer EchoAPI. Il peut révolutionner votre expérience de débogage et rationaliser votre processus de développement. Pour plus d’informations, visitez echoapi.com. </p>
<h3>
  
  
  Exemple : client EchoAPI pour SSE
</h3>

<p>Dans EchoAPI, l'utilisation de l'interface SSE est simple. Entrez simplement l'URL, remplissez les paramètres pertinents et cliquez sur "<strong>Envoyer</strong>" pour afficher les résultats de votre demande.</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173482771591634.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Implementing Server-Sent Events (SSE) with Python and Go"></p>


          </div>

            
        </corps></t>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texteComment utiliser Python pour trouver la distribution ZIPF d'un fichier texteMar 05, 2025 am 09:58 AM

Ce tutoriel montre comment utiliser Python pour traiter le concept statistique de la loi de Zipf et démontre l'efficacité de la lecture et du tri de Python de gros fichiers texte lors du traitement de la loi. Vous vous demandez peut-être ce que signifie le terme distribution ZIPF. Pour comprendre ce terme, nous devons d'abord définir la loi de Zipf. Ne vous inquiétez pas, je vais essayer de simplifier les instructions. La loi de Zipf La loi de Zipf signifie simplement: dans un grand corpus en langage naturel, les mots les plus fréquents apparaissent environ deux fois plus fréquemment que les deuxième mots fréquents, trois fois comme les troisième mots fréquents, quatre fois comme quatrième mots fréquents, etc. Regardons un exemple. Si vous regardez le corpus brun en anglais américain, vous remarquerez que le mot le plus fréquent est "th

Comment utiliser la belle soupe pour analyser HTML?Comment utiliser la belle soupe pour analyser HTML?Mar 10, 2025 pm 06:54 PM

Cet article explique comment utiliser la belle soupe, une bibliothèque Python, pour analyser HTML. Il détaille des méthodes courantes comme find (), find_all (), select () et get_text () pour l'extraction des données, la gestion de diverses structures et erreurs HTML et alternatives (Sel

Filtrage d'image en pythonFiltrage d'image en pythonMar 03, 2025 am 09:44 AM

Traiter avec des images bruyantes est un problème courant, en particulier avec des photos de téléphones portables ou de caméras basse résolution. Ce tutoriel explore les techniques de filtrage d'images dans Python à l'aide d'OpenCV pour résoudre ce problème. Filtrage d'image: un outil puissant Filtre d'image

Comment travailler avec des documents PDF à l'aide de PythonComment travailler avec des documents PDF à l'aide de PythonMar 02, 2025 am 09:54 AM

Les fichiers PDF sont populaires pour leur compatibilité multiplateforme, avec du contenu et de la mise en page cohérents sur les systèmes d'exploitation, les appareils de lecture et les logiciels. Cependant, contrairement aux fichiers de texte brut de traitement Python, les fichiers PDF sont des fichiers binaires avec des structures plus complexes et contiennent des éléments tels que des polices, des couleurs et des images. Heureusement, il n'est pas difficile de traiter les fichiers PDF avec les modules externes de Python. Cet article utilisera le module PYPDF2 pour montrer comment ouvrir un fichier PDF, imprimer une page et extraire du texte. Pour la création et l'édition des fichiers PDF, veuillez vous référer à un autre tutoriel de moi. Préparation Le noyau réside dans l'utilisation du module externe PYPDF2. Tout d'abord, l'installez en utilisant PIP: pip is p

Comment se cacher en utilisant Redis dans les applications DjangoComment se cacher en utilisant Redis dans les applications DjangoMar 02, 2025 am 10:10 AM

Ce tutoriel montre comment tirer parti de la mise en cache Redis pour augmenter les performances des applications Python, en particulier dans un cadre Django. Nous couvrirons l'installation redis, la configuration de Django et les comparaisons de performances pour mettre en évidence le bien

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?Mar 10, 2025 pm 06:52 PM

Cet article compare TensorFlow et Pytorch pour l'apprentissage en profondeur. Il détaille les étapes impliquées: préparation des données, construction de modèles, formation, évaluation et déploiement. Différences clés entre les cadres, en particulier en ce qui concerne le raisin informatique

Introduction à la programmation parallèle et simultanée dans PythonIntroduction à la programmation parallèle et simultanée dans PythonMar 03, 2025 am 10:32 AM

Python, un favori pour la science et le traitement des données, propose un écosystème riche pour l'informatique haute performance. Cependant, la programmation parallèle dans Python présente des défis uniques. Ce tutoriel explore ces défis, en se concentrant sur l'interprète mondial

Comment implémenter votre propre structure de données dans PythonComment implémenter votre propre structure de données dans PythonMar 03, 2025 am 09:28 AM

Ce didacticiel montre la création d'une structure de données de pipeline personnalisée dans Python 3, en tirant parti des classes et de la surcharge de l'opérateur pour une fonctionnalité améliorée. La flexibilité du pipeline réside dans sa capacité à appliquer une série de fonctions à un ensemble de données, GE

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),