0
votes

Comment contenir ou dormir une demande HTTP jusqu'à ce que le traitement soit effectué sur le côté serveur?

J'ai une application Web. Le client UI déclenche une demande HTTP au serveur. Le serveur doit contenir la réponse pendant quelques secondes avant qu'il envoie la réponse. Ce temps de maintien - est de contacter un autre service tiers. Nous envoyons une demande à un service tiers et le sondez-vous pendant quelques secondes pour chaque 1Sec pour voir un état spécifique. Une fois cette boucle se termine, envoyez la réponse du client UI. Donc xxx

Comment les développeurs font-ils cela pour y parvenir? Si nous bloquons le thread HTTP actuel, y a-t-il un effet sur l'ensemble du serveur. Cela causera-t-il un problème pour d'autres demandes?

  1. www.test.com
  2. Entrez le nom d'utilisateur et le mot de passe - POST
  3. Server valide dans la base de données locale informatique, Envoie une demande à une application tierce pour obtenir une citation liée à son nom d'utilisateur.
    1. Créer une demande de devis - réponse reçue avec État: "Être préparé"
    2. Obtenez la quoation - "Être préparé"
    3. Attendez / dormir pour 1Second
    4. Obtenez la quoation - "Être préparé"
    5. Attendez / dormir pour 1Second
    6. Obtenez la quoation - "Être préparé"
    7. Attendez / dormir pour 1Second
    8. Obtenez la quoation - "Terminer"
    9. Envoyer une réponse en tant que JSON.

      La même chose peut être faite d'une manière différente.

      1. www.test.com
      2. Entrez le nom d'utilisateur et le mot de passe - POST
      3. Server valide dans la base de données locale informatique, Envoie une demande à une application tierce pour obtenir une citation liée à son nom d'utilisateur.
        1. Créer une demande de devis - réponse reçue avec État: "Être préparé"
        2. stocker la request_id dans dB.
        3. Envoyer une réponse comme JSON
        4. sondage au serveur avec demande_id
        5. "être préparé"
        6. Settimeout (1Sec)
        7. sondage au serveur avec demande_id
        8. "être préparé"
        9. Settimeout (1Sec)
        10. sondage au serveur avec demande_id
        11. "être préparé"
        12. Settimeout (1Sec)
        13. sondage au serveur avec demande_id
        14. "complet"

          Il y a un différent entre les deux cas.

          premier, je n'assore pas mon serveur Web avec des appels http tous les secondes. Plutôt, je tiens la première demande HTTP et attendez la réponse du service de quoation, puis traitez la réponse. Ma question est de savoir comment puis-je contenir ou faire ce filet de demande pour dormir pour cette fréquence 1 secondec.

          second, est un interrogation continu qui inonde le serveur Web.


2 commentaires

Le rappel est un moyen de le faire.


Quelqu'un peut-il répondre à cela pour une application basée sur .NET et Java.


3 Réponses :


1
votes

Je pense que votre approche est intéressante, mais loin d'être efficace. Lors du développement d'une application Web, il existe des moyens plus élégants de statut de rapport de rapport. Jetez un coup d'œil sur SignalR ou Socketio par exemple. De cette façon, vous n'avez pas besoin de conserver une connexion ouverte au serveur, mais le statut de travail est poussé au client.


0 commentaires

0
votes

nœud.js est célibataire fileté par nature, nous utilisons des promesses d'attendre que nous n'avions pas reçu de réponse d'autres services tiers.

async function apiController(req, res){
      const response = await request.get('http://...........)
      res.status(200).json({...})


0 commentaires

0
votes

Quelques aspects à votre question:

(1) Votre serveur Web peut-il faire cela? Oui, bien sûr, facilement. Toute framework de serveur HTTP populaire (comme express code>) utilise des rappels asynchrones pour la manutention de la demande / réponse. Donc, vous pouvez facilement simplement avoir la réponse non envoyée tant que vous n'avez pas reçu les informations dont vous avez besoin d'une API tiers. P>

Exemple pseudocode Utilisation de promesses avec Express: P>

- Browser client makes JSON request to your server.
- Server makes API call to service, gets back a 'request id'.
- Server sends back request id to browser client.
- Browser client enters loop, every 5 seconds, it sends server a message.
  - 'Did my request id complete yet?'
  - Server takes request id, asks service 'what is the answer?'
  - Send response back to browser.
- Browser client loops until the request is complete, then continues.


0 commentaires