IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

ESP32 ESPAsyncWebServer - Communication serveur -> client


Sujet :

Arduino

  1. #1
    Membre habitué
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 293
    Points : 145
    Points
    145
    Par défaut ESP32 ESPAsyncWebServer - Communication serveur -> client
    Bonjour à tous
    J'ai créé un serveur Web sur un ESP32 et j'établi bien la communication avec le client (ma page HTML sur mon PC).
    Mais la requête client est une demande d'état d'un périphérique de l'ESP32.
    Donc l'ESP32 doit questionner ce périphérique et envoyer l'état au client.
    Ma question: comment faire pour transmettre simplement une information du serveur vers le client (sans une requête préalable)?
    Est-ce possible sans passer par webSocket?

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par mormic Voir le message
    Ma question: comment faire pour transmettre simplement une information du serveur vers le client (sans une requête préalable)?
    Est-ce possible sans passer par webSocket?
    le principe général de HTTP c'est que c'est le client (navigateur web) qui effectue la requête, une réponse est alors générée et la connexion est close. Le Serveur HTTP n'a aucune connaissance a priori des clients possibles (pour un serveur sur internet, ce serait l'ensemble des ordinateurs ayant accès à Internet dans le monde...)

    Quand vous dites "sans une requête préalable" comment envisagez vous cela? il faut quand même que le serveur ait l'adresse IP du client d'une façon ou d'une autre et éventuellement du port auquel il doit s'adresser pour atteindre le service d'affichage (le navigateur). Si c'est le serveur qui contacte le client, en fait vous avez inversé les rôles...

    Si une première connexion est envisageable ensuite le HTML généré peut inclure un timer qui fait que tant que la page web est affichée sur le navigateur, tous les ∆t (toutes les secondes par exemple) une requête de mise à jour des données est envoyée au serveur. Avec des techniques comme AJAX par exemple ça peut ne pas se voir (pas de rafraîchissement complet de la page, juste des éléments modifiés)

    Les webSocket c'est une autre approche. Un serveur WebSocket est un protocole de communication bidirectionnelle mais l'initiation est toujours à la charge du client

    - Le client établit une connexion WebSocket en envoyant une demande d'ouverture de connexion au serveur via un handshake HTTP initial.
    - Une fois la connexion WebSocket établie, les données peuvent être envoyées dans les deux sens sans nécessiter de nouvelles requêtes HTTP.
    - Le serveur et le client peuvent s'envoyer des messages sous forme de trames WebSocket, ce qui permet une communication en temps réel.

    Comme les connexions WebSocket restent ouvertes ça permet une latence réduite et une communication efficace entre le client et le serveur.


    Dans les 2 cas donc c'est le client qui initie la transaction

  3. #3
    Membre habitué
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 293
    Points : 145
    Points
    145
    Par défaut
    Merci Jay M. pour ces explications.
    Dans un premier temps je vais tacher d'opter pour la première solution: le client demande l'état d'un périphérique de l'ESP32, puis après accusé réception par le serveur, envoi des requêtes pour connaître la réponse (n fois).
    Par contre, y a-t'il un moyen pour le serveur de savoir quand le client se déconnecte?

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par mormic Voir le message
    Par contre, y a-t'il un moyen pour le serveur de savoir quand le client se déconnecte?
    Si vous faites du web de base, le client se déconnecte après chaque requête.

    Un moyen de détecter la fermeture du navigateur est d'utiliser des événements JavaScript côté client, tels que l'événement "beforeunload" ou "unload" pour envoyer une notification au serveur avant que la page ne se ferme. Cependant, cela ne garantit pas que la notification sera envoyée en cas de fermeture inattendue du navigateur, par exemple, en cas de panne de l'ordinateur.

    Une autre solution est le heartbeat : vous pouvez envisager d'implémenter un mécanisme de ping-pong. Le client envoie périodiquement des pings au serveur, et le serveur répond par des pongs. Si le serveur ne reçoit pas de ping dans un délai donné après une première connexion , il peut considérer le client comme déconnecté et si le client ne reçoit pas le pong il peut considérer qu’il y a un soucis réseau ou que le serveur a planté


    Pourquoi avez vous besoin de savoir que le client est parti?

  5. #5
    Membre habitué
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 293
    Points : 145
    Points
    145
    Par défaut
    Merci pour ces riches explications que je vais utiliser prestement.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Packet Tracer - Communication Serveur TACAS+ -CLIENT
    Par EinsteinEmc2 dans le forum Administration
    Réponses: 0
    Dernier message: 19/10/2017, 17h40
  2. Communication Serveur- Multi Client via socket
    Par jesuisperdu dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/03/2011, 09h37
  3. Problème communication Serveur et Client !
    Par djiga4me dans le forum Web & réseau
    Réponses: 24
    Dernier message: 13/08/2010, 05h55
  4. Problème communication sockets serveur mutli-client
    Par muad'dib dans le forum Réseau
    Réponses: 5
    Dernier message: 17/05/2007, 02h21
  5. [servlet][http] communication serveur/client
    Par amel666 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/02/2006, 07h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo