Wednesday, February 23, 2022

web asynchrone

 socketio

voir dans python/lvsio/perso/new

install

python3 -m pip install "uvicorn[standard]

gunicorn

python3 -m pip install python-socketio

python3 -m pip install aiohttp

lancement :

uvicorn --reload async_app:app

----------

en mode py4web (ass)

controller : ne fait rien de spécial. pas de socketio client ou serveur.

template/index.html : 

  • etablit la connexion entre le browser et  le serveur asynchrone donc si on veut pouvoir acceder au serveur depuis un browser situé sur une autre machine que le serveur il ne fait pas utiliser localhost:port mais le nom réseau du serveur
  • on a la partie interactive sous forme de message
  • pour chaque action pilotée par message on a l'équivalent action coté serveur
  • L'action qui déclenche est le connect 
  • importer la library js de socket io (<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.3.1/socket.io.min.js"></script>)
  • Verifier la cohérence de version avec le serveur

sur le serveur async :

  • important : parametrer la sécurité CORS dans le constructeur du serveur

sio = socketio.AsyncServer(async_mode='asgi',cors_allowed_origins="*")  

action serveur

@sio.event
async def allo(sid, data):
    #result = data['numbers'][0] + data['numbers'][1]
    tumasdit=data['msg']
    print (tumasdit)
    await sio.emit('msg_verlan', {'enverlan': tumasdit[::-1]}, )
 

action client

sio.on('msg_verlan', (data) => {
  console.log(data);
  document.getElementById("me").value=data['enverlan'];
        });
 

le pivot c'est l'id du message : msg_verlan

Pour les taches lancées depuis l'exterieur :

2 approches sont possibles

1/ on parle avec un client au serveur socketio

dans ce cas on on fait un emit sur socketio

et l'evenement est traité par le serveur

il est trappé soit par le nom de l'evenement si on met @sio.on('nom de levent')

soit par le nom de la fonction si on ne met que  @sio.event

voir exemple C1.py dans perso/new


2/ on parle avec un redis qui sert d'intermédiaire.

dans ce cas on on fait un emit sur redis qui publie directement aux clients enregistrés

voir exemple C2.py dans perso/new


1 comment:

  1. 888 Casino New Jersey | Get the Best Rates - JTGH
    888 광주 출장샵 Casino New 청주 출장마사지 Jersey. 군포 출장샵 Hotel, NJ. Address: 908 E. Main Street. New 포천 출장안마 Jersey, United States. Year Built: 1980. Casino Type: Casino. 계룡 출장마사지

    ReplyDelete

Ma journée du 01 Décembre 2025

En ce premier jour de décembre, l'heure est venue, De conter une histoire, par les dés soutenue. Quinze dés ont roulé, offrant leur dest...