Créer un client WebSocket avec websockets

Fonctions :

  • Créer un client WebSocket

    WebSockets permet une communication bidirectionnelle en temps réel entre le client et le serveur via un canal de communication persistant. Le module websockets en Python simplifie la gestion des connexions WebSocket côté client et serveur. Dans cet exemple, nous allons créer un client WebSocket en utilisant la bibliothèque websockets pour se connecter à un serveur WebSocket et échanger des messages en temps réel

    Importation :

    import asyncio
    import websockets

    Exemple de code :

    async def connect_to_server():
        uri = "ws://example.com/socket"  # Remplacer par l'URL du serveur WebSocket
    
        # Se connecter au serveur WebSocket
        async with websockets.connect(uri) as websocket:
            
            # Envoyer un message au serveur
            await websocket.send("Hello Server!")
            print("Message envoyé au serveur")
    
            # Recevoir un message du serveur
            response = await websocket.recv()
            print(f"Message reçu du serveur : {response}")
    
    # Lancer la connexion et l'échange de messages avec le serveur
    asyncio.get_event_loop().run_until_complete(connect_to_server())
    Résultat du code

    Explication du code :

    • uri = "ws://example.com/socket" : remplacez par l'URL de votre serveur WebSocket.
    • websockets.connect(uri) : ouvre une connexion WebSocket avec le serveur.
    • await websocket.send() : envoie un message au serveur.
    • response = await websocket.recv() : reçoit un message du serveur et l'affiche.
  • Gestion des erreurs et exceptions

    websockets.exceptions.ConnectionClosed : Cette exception est levée lorsqu'une connexion WebSocket est fermée, soit de manière ordonnée par le serveur, soit de manière inattendue (par exemple, si le serveur se déconnecte ou plante). Elle permet de capturer cette fermeture et d'informer l'utilisateur de la perte de la connexion.

    Exemple de code :

    import asyncio
    import websockets
    
    async def connect_to_server():
        uri = "ws://example.com/socket"
    
        try:
            async with websockets.connect(uri) as websocket:
                await websocket.send("Hello Server!")
                print("Message envoyé au serveur")
    
                response = await websocket.recv()
                print(f"Message reçu du serveur : {response}")
    
        except websockets.exceptions.ConnectionClosed as e:
            print(f"Erreur de connexion : {e}")
        except Exception as e:
            print(f"Une erreur est survenue : {e}")
    Résultat du code

    Explication du code :

    • Gestion de l'exception ConnectionClosed : cette exception est levée lorsque la connexion WebSocket est fermée.
    • Gestion d'autres exceptions génériques : pour attraper tous les autres types d'erreurs possibles (problèmes réseau, erreurs d'URL, etc.).
  • Message continu (Asynchrone)

    Dans une communication WebSocket, le flux de données peut être bidirectionnel et en temps réel. Cela signifie que vous pouvez non seulement envoyer des messages, mais aussi en recevoir de manière continue sans avoir à redémarrer la connexion. En utilisant l'asynchronisme avec asyncio, vous pouvez gérer ces échanges de manière efficace, ce qui est essentiel dans des applications nécessitant une interaction constante, comme des chats en ligne, des notifications en temps réel ou des applications de jeux. Le message continu (asynchrone) fait référence à l'échange de données entre le client et le serveur sans interruption. L'utilisation de asyncio et websockets permet de recevoir et d'envoyer des messages dans une boucle infinie ou conditionnelle, sans bloquer l'exécution du programme.

    Exemple de code :

    import asyncio
    import websockets
    
    async def connect_to_server():
        uri = "ws://example.com/socket"
    
        try:
            async with websockets.connect(uri) as websocket:
                
                # Envoyer un message
                await websocket.send("Hello Server!")
                print("Message envoyé au serveur")
    
                while True:
                    # Recevoir un message
                    message = await websocket.recv()
                    print(f"Message reçu : {message}")
    
                    # Répondre au serveur
                    await websocket.send(f"Message reçu: {message}")
                    print("Réponse envoyée")
    
        except websockets.exceptions.ConnectionClosed as e:
            print(f"Erreur de connexion : {e}")
        except Exception as e:
            print(f"Une erreur est survenue : {e}")
    Résultat du code

    Explication du code :

    • Boucle while True : permet d'attendre et de répondre à des messages de manière continue.
    • Réponse automatique au serveur : chaque message reçu est immédiatement renvoyé au serveur.