Établir une connexion WebSocket avec Flask et FastAPI

Fonctions :

  • Flask - Connexion WebSocket avec Flask-SocketIO

    Permet d'établir une connexion WebSocket avec le serveur en utilisant l'extension Flask-SocketIO.

    Importation :

    from flask_socketio import SocketIO

    Attributs :

    Paramètre Type Description Valeur par défaut
    app Instance de l'application Flask L'instance de votre application Flask, généralement créée avec `Flask(__name__)`. None
    host str Adresse IP pour écouter les connexions. Par défaut, l'application écoute sur `127.0.0.1`. '127.0.0.1'
    port int Le port sur lequel l'application écoute. Par défaut, c'est `5000`. 5000

    Exemple de code :

    from flask import Flask
    from flask_socketio import SocketIO
    
    app = Flask(__name__)
    socketio = SocketIO(app)
    
    @socketio.on('message')
    def handle_message(message):
        print(f'Reçu: {message}')
        send(f'Reçu votre message: {message}')
    
    if __name__ == '__main__':
        socketio.run(app, host='0.0.0.0', port=5000)
    Résultat du code

    Explication du code :

    • Ce code crée une application Flask avec SocketIO pour gérer les connexions WebSocket.
    • La fonction @socketio.on('message') écoute les messages envoyés au serveur. Lorsqu'un message est reçu, la fonction handle_message est appelée et renvoie une réponse au client avec send().
    • socketio.run() démarre le serveur, qui écoute sur toutes les interfaces réseau (0.0.0.0) et sur le port 5000.
  • Flask - Envoi et Réception de Messages

    Décore une fonction pour écouter un événement spécifique sur la connexion WebSocket, comme un message entrant.

    Importation :

    from flask_socketio import send

    Attributs :

    message : Le message reçu du client.

    Exemple de code :

    @socketio.on('message')
    def handle_message(message):
        print(f'Reçu: {message}')
        send(f'Reçu votre message: {message}')
    Résultat du code

    Explication du code :

    • Cette fonction écoute les messages envoyés par le client via la connexion WebSocket.
    • Lorsqu'un message est reçu, il est affiché dans le terminal grâce à print(f'Reçu: {message}').
    • Ensuite, une réponse est envoyée au client en utilisant la fonction send(f'Reçu votre message: {message}').
  • FastAPI - Connexion WebSocket avec FastAPI

    Permet d'établir une connexion WebSocket avec FastAPI de manière asynchrone.

    Importation :

    from fastapi import FastAPI, WebSocket

    Exemple de code :

    from fastapi import FastAPI, WebSocket
    import uvicorn
    
    app = FastAPI()
    
    @app.websocket("/ws")
    async def websocket_endpoint(websocket: WebSocket):
        await websocket.accept()
        while True:
            data = await websocket.receive_text()
            print(f"Message reçu : {data}")
            await websocket.send_text(f"Reçu votre message : {data}")
    
    if __name__ == "__main__":
        uvicorn.run(app, host="0.0.0.0", port=5000)
    Résultat du code

    Explication du code :

    • Ce code crée une application FastAPI avec un endpoint WebSocket sur /ws.
    • La fonction websocket_endpoint gère la connexion WebSocket et accepte les connexions avec await websocket.accept().
    • Ensuite, dans une boucle infinie (while True), il attend les messages du client avec await websocket.receive_text() et renvoie une réponse avec await websocket.send_text().
    • Le serveur est démarré avec uvicorn.run(), écoutant sur toutes les interfaces réseau et sur le port 5000.
  • FastAPI - Envoi et Réception de Messages

    Permet de recevoir un message texte du client via WebSocket.

    Attributs :

    data : Message reçu du client.

    Exemple de code :

    data = await websocket.receive_text()
    print(f"Message reçu : {data}")
    Résultat du code

    Explication du code :

    • Cette ligne permet de recevoir un message texte envoyé par le client via WebSocket.
    • Le message reçu est stocké dans la variable data, puis il est affiché à l'écran avec print(f"Message reçu : {data}").