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 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? P> La même chose peut être faite d'une manière différente. P> Il y a un différent entre les deux cas. P> 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. p> second, est un interrogation continu qui inonde le serveur Web. P> P>
3 Réponses :
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. P>
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({...})
Quelques aspects à votre question:
(1) Votre serveur Web peut-il faire cela? Oui, bien sûr, facilement. Toute framework de serveur HTTP populaire (comme Exemple pseudocode Utilisation de promesses avec Express: P> 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> - 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.
Le rappel est un moyen de le faire.
Quelqu'un peut-il répondre à cela pour une application basée sur .NET et Java.