Le premier programme de Websocket serveur en python :
Pour, à la fois recevoir et envoyer des messages sur la même connexion, on combine les deux fonctions send() et recv() en les faisant s'exécuter dans des tâches parallèles :
#!/usr/bin/env python3 import asyncio import websockets # Gestion de l'envoi des messages du serveur au client async def gestion_envoi_message(websocket): i = 0 # boucle infinie pour envoyer toutes les secondes un message ; while True: await websocket.send("Bonjour {}".format(nb)) i = i + 1 await asyncio.sleep(1) # Gestion des messages recus du client async def gestion_reception_message(websocket): while True: # reception du message d'un client message = await websocket.recv() print(message) # fonction lancee à chaque connexion d'un client async def echange(websocket,path): # définir la fonction comme asynchrone #envoyer des messages en parallèle envoyer = asyncio.ensure_future(gestion_envoi_message(websocket)) #recevoir message en parallèle recevoir = asyncio.ensure_future(gestion_reception_message(websocket)) termine, attente = await asyncio.wait( [envoyer, recevoir], return_when = asyncio.FIRST_COMPLETED, ) # Definir la fonction qui sera appelee par le serveur a la connexion d'un client lancement_serveur = websockets.serve(echange,'10.3.141.1', 5678) # Creation de la boucle d'evenement (event loop) loop = asyncio.get_event_loop() loop.run_until_complete(lancement_serveur) loop.run_forever() loop.close()
Dans la page Web HTML :
Vous pouvez à la fois :
Pour visualiser l'envoi et la réception simultanés des messages, cliquez sur le bouton de la page et observez l'affichage du print dans le terminal du Raspberry
===== Envoyer plusieurs message en même temps =====
Il peut être utile d'envoyer en même temps plusieurs messages et non les uns à la suite des autres. C'est le cas par exemple pour :
* faire avancer la voiture et,
* faire tourner en même temps les roues.
Dans la fonction du programme serveur qui traite de la réception des message vous pouvez lancer des tâches parallèles de la manière suivante :
<code python>
async def gestionreceptionmessage(websocket):
while True:
# reception du messsage d'un client
message = await websocket.recv()
print(message)
# lancement de la tache qui gere le deplacement avant/arriere de la voiture
asyncio.geteventloop().createtask(deplacement(message))
# lancement de la tache qui gere la direction droite ou gauche
asyncio.geteventloop().createtask(direction(message))
</code>
Il reste à écrire les fonctions correspondantes deplacement() et direction() qui doivent analyser le contenu du message pour savoir le sens du déplacement (avant ou arrière) ainsi que la direction à prendre (droite ou gauche.
==== Les activités … ====