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())
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}")
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.).
- Gestion de l'exception
-
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}")
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.
- Boucle