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

Web & réseau Delphi Discussion :

[Android]Comment est traitée une succession rapide de requêtes REST?


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 304
    Par défaut [Android]Comment est traitée une succession rapide de requêtes REST?
    Bonjour,

    En l'état normal, une app envoie vers un serveur une requête REST et reçoit en retour une réponse à la requête.

    Mais que se passe-t-il, si l'app client envoie dans un laps de temps très court de nombreuses requêtes REST et surtout envoie des nouvelles requêtes REST alors que le serveur n'a pas encore répondu aux précédentes requêtes?

    Est-ce que cela fonctionne avec un système du genre tampon?

    Est-ce que les nouvelles requêtes sont envoyées une à une seulement quand la requête REST précédente à reçu une réponse?

    Est-ce que toutes les requêtes sont envoyées au serveur et l'app client récupère les réponses dans l'ordre dans laquelle le serveur répond?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Cela dépend de ta bibliothèque mais aussi de la logique de ton api REST, est-ce que lib synchrone ou pas.

    Si synchrone, le problème ne se pose pas, tu fais ton appel, la lib attend la réponse, tu es obligé de faire toi-même plusieurs threads donc tu gères toi même la parallélisation et au beosin l'ordonnancement et les dépendances de résultats.

    Si asynchrone, l'ordre de retour peut varier, dans le désordre c'est possible, mais tu as des objets de context qui permet de savoir à quoi correspond la réponse, c'est plutôt rare en Delphi d'ailleurs on voit ça plus dans les langages JavaScript qui sont conçus pour ces problématiques REST à coup d'infame async await et si il y a des appels relatifs, lié par un résultat d'un appel qui s'utilise comme paramètre de l'appel suivant, évidemment que le code sera écrit pour que cela reste séquentiel.

    Ce n'est pas le client qui gère ça, il "subit" le fonctionnement du serveur.


    REST c'est du HTTP donc par définition, un mode déconnecté et potentiellement state-less.

    Si il n'y a pas d'ordre logique métier dans les appels, ton serveur REST DOIT encaisser plusieurs requêtes en simultanées et concurrentielles.
    ET encore une fois, la réponse ne peut pas être prédit, avant les serveurs REST étaient multi-threads, mais cette mode disparaît avec un traitement séquentiel par le serveur c'est le répartiteur de charge à l'instar NGINX couplé à Kubernetes qui va gérer l'utilisation de 1 à n worker qui iront dépiler les requêtes, le code du serveur étant plus simple, et au final plus performant car la logique de répartitions est mieux gérée ailleurs.

    Pense que HTTP est basé sur TCP/IP, déjà ce dernier fourni un tampon des données reçues, les serveurs HTTP gèrent très bien ça, si l'on prend ça à la façon Delphi, souvent à base de Indy (faudrait regarder aussi DataSnap) mais cela lance des threads (en pool ou non) et cela dépile les messages un par un, évidemment qu'une requête facile à traiter sera retournée plus vite qu'une requête longue, donc par définition c'est traiter dans l'ordre mais selon la complexité cela peut créer du désordre, le client normalement surtout en Delphi, il est bloquant donc il attend sa réponse, à toi de gérer les threads.


    La bonne question à te poser c'est "Est-ce que la logique métier requiert un ordonnancement"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 304
    Par défaut
    Merci pour tes éclaircissements.

    Côté Delphi, les échanges REST sont traités à l'aide de la chaine de composants TRESTClient, TRESTRequest, TRESTResponse, TRESTResponseDataSetAdapter. Côté serveur REST, il s'agit d'un service externe et nous ne disposons pas de détails sur son mode de fonctionnement.

    Je vais faire des tests pour évaluer le comportement du serveur REST et si nécessaire, je vais utiliser les threads.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/10/2019, 20h52
  2. Comment est structuré une table cluster
    Par pgillet dans le forum SAP
    Réponses: 2
    Dernier message: 23/04/2014, 09h08
  3. comment est traite l'url sur un fichier inexistant ?
    Par Polka_dance dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2013, 17h11
  4. voir comment est alimentée une vue qui est dans dba_objects
    Par meufeu dans le forum Administration
    Réponses: 15
    Dernier message: 06/10/2004, 17h27
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

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