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 :

Aide sur un dialogue Client-Serveur. [Arduino ESP32]


Sujet :

Arduino

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

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 397
    Points : 197
    Points
    197
    Par défaut Aide sur un dialogue Client-Serveur.
    Bonjour à tous et une bien bonne nouvelle année.

    Ma question relève plus du dévelopement Web mais si quelqu'un sur ce forum a une idée?
    Dans mon application domotique dont le serveur est un ESP32:

    Un client(PC ou portable) envoi une demande au serveur pour basculer un relais sur une carte distante.
    Le serveur accuse réception de la requète et envoi la commande à la carte distante.
    La carte distante exécute la commande et en accuse réception en confirmant le nouvel état du relais(On ou Off).

    Nom : schema.jpg
Affichages : 48
Taille : 11,8 Ko
    Ma question: comment faire remonter au client l'information sur l'état du relais:
    Puis-je retarder l'envoi du 'ack' en lui envoyant Ok21O venant de la carte distante sans risquer un 'timeout'?

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 847
    Points : 5 759
    Points
    5 759
    Par défaut
    Le timeout moyen des navigateurs web varie, mais il est généralement compris entre 30 et 60 secondes. Ce délai peut dépendre du navigateur et de la configuration du serveur, bien que la plupart des navigateurs suivent une plage similaire. Certains navigateurs, comme Chrome ou Firefox, peuvent ajuster ce délai en fonction des conditions réseau ou de la configuration utilisateur.

    Donc si le cycle requête / réponse de la carte distante dure moins de 30 secondes, vous pouvez différer la réponse à la requête web initiale et attendre simplement l'ACK. bien sûr ce n'est plus asynchrone.

    Sinon en mode web traditionnel, une fois que vous avez envoyé la réponse et fermé le canal de la requête, le serveur web ne peut pas de lui même re contacter le client. Donc il faudrait que le serveur renvoie d'abord un ACK disant "requête bien reçue, reviens voir bientôt si elle a été traitée correctement" et ensuite le client va demander "où en est ma requête" tous les ∆t pour mettre à jour sa page (avec AJAX par exemple).

    une autre option est d'utiliser une websockets. Il existe aussi le Server-Sent Event qui permet au serveur d'envoyer des mises à jour de manière unidirectionnelle vers le client via une connexion HTTP persistante. Ce mécanisme est particulièrement adapté pour des flux de données en temps réel comme des notifications ou des mises à jour régulières. Cependant, contrairement aux WebSockets, il ne permet pas de communication bidirectionnelle.

    Autre option : l’utilisation de long polling, où le client envoie une requête au serveur, et le serveur la maintient ouverte (c'est plus lourd que SSE ou WebSockets mais le long polling peut être utile dans des environnements où ces technologies ne sont pas disponibles).

    Vous pouvez utiliser 'en-tête HTTP "Keep-Alive" qui permet de signaler au navigateur que le serveur souhaite maintenir la connexion ouverte après une réponse, au lieu de la fermer immédiatement après l'échange. Lorsqu'un serveur envoie cet en-tête avec une valeur, par exemple `Connection: Keep-Alive`, il indique au navigateur que la connexion peut être réutilisée pour plusieurs requêtes, ce qui évite la nécessité d'établir une nouvelle connexion pour chaque requête successive. Dans le cas de long polling, cela permet au serveur de maintenir la connexion ouverte pendant une période prolongée sans qu'elle soit fermée par le navigateur ou le serveur, à condition que le serveur continue de répondre périodiquement, même avec des données minimales ou de simples "pings", pour éviter un timeout.


    le plus simple c'est Requête, réponse et la page web qui ensuite revient demander un update tous les ∆t jusqu'à ce qu'il y ait ACK ou NACK.

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

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 397
    Points : 197
    Points
    197
    Par défaut
    si le cycle requête / réponse de la carte distante dure moins de 30 secondes, vous pouvez différer la réponse à la requête web initiale et attendre simplement l'ACK
    La réponse arrive au serveur en moins de deux secondes, ce qui lui permet d'avoir grandement le temps d'envoyer son 'ack' avec la réponse de la carte distante. Je vais modifier les dialogues en ce sens.

    Je pensais que c'était plus court.

    Merci Jay M pour ce tour d'horizon des possibilités répondant à mon problème.

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

Discussions similaires

  1. Aide sur un programme Client Serveur
    Par clubmed01 dans le forum Linux
    Réponses: 33
    Dernier message: 29/05/2012, 11h22
  2. [TClientSocket] Dialogue client/serveur Delphi 6
    Par Hikaru dans le forum Web & réseau
    Réponses: 6
    Dernier message: 31/03/2009, 11h28
  3. grammaire de dialogue client serveur
    Par aaronw dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 20/02/2006, 00h30
  4. Méthode de dialogue client/serveur
    Par MisterFreeze dans le forum C++
    Réponses: 3
    Dernier message: 06/01/2006, 23h31
  5. [Reseau] Dialogue client-serveur
    Par Nasky dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 08/08/2005, 16h07

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