Question

Contexte: De mon interface web javascript, je lance une opération (plusieurs minutes) de longue durée qui est menée sur le backend .NET2.0. L'appel retourne immédiatement avec l'opération ID pendant l'exécution de l'opération de longue durée en parallèle. Les opérations ne sont pas d'UC, mais effectuent des appels réseau lentes. Une fois l'opération terminée, je veux voir les résultats dans l'interface utilisateur Web.

Question: Comment puis-je informer le client lorsque le travail est fait

Options J'ai examiné:

1 : Je lance l'opération de longue durée de manière asynchrone directement à partir de JS et j'attends la valeur de retour d'être le endresult au lieu d'un ID d'opération. Ma bibliothèque AJAX prend soin de tout, et la vie est très facile et propre. Le problème est que sur le côté serveur le fil est un fil de ThreadPool que je fermerai maintenant pendant quelques minutes . Vous n'avez pas besoin trop de demandes parallèles de longue durée pour que le ThreadPool mourir de faim et de mettre l'ensemble du serveur à genoux, même s'il y a une puissance de traitement suffisante.

2 : Avec l'ID d'opération, je commence à interroger le serveur si l'opération est terminée. Cependant, ceci est une attaque par déni de service contre mon propre serveur. En outre, il doit être juste solution ajax lui. Ce n'est pas un problème unique.

Était-ce utile?

La solution

Consultez WebSync , une implémentation comète pour .NET. Devrait être exactement ce que vous cherchez.

Autres conseils

Polling, si elle est faite correctement, ne sera pas un effet notable sur la charge du serveur. Vous devez personnaliser l'intervalle pour couvrir au mieux les spécificités de votre travail de serveur - par exemple vous ne lance pas de pendant au moins 2 minutes si vous savez que l'opération prend généralement plus. Même après que vous choisissez un intervalle assez grand - par exemple 10 sec. En utilisant une demande de service Web ou un gestionnaire personnalisé minimisera le trafic et le temps du serveur nécessaire pour traiter la demande.

Peut-être inverse ajax est utile si vous avez l'habitude de trop de clients simultanés. Cela est parfois appelé la comète.

inverse Ajax fait référence à un modèle de conception Ajax qui utilise les connexions HTTP à long terme pour permettre une communication à faible latence entre un serveur Web et un navigateur. Fondamentalement, il est un moyen d'envoyer des données du client vers le serveur et un mécanisme au navigateur pour pousser les données du serveur (ce dont vous avez besoin).

http://en.wikipedia.org/wiki/Reverse_Ajax

Sons comme il pourrait répondre à vos besoins, je viens d'utiliser et cela a fonctionné très bien.

ce que d'avoir caché (ou petit) iframe exécuter le script à long courir et faire le javascript pour vérifier que le contenu de l'iframe? par exemple. scénario écrit à l'ID iframe à son extrémité.

Votre option 2 est exactement ce que je l'ai fait avant. Utilisez setTimeout pour limiter votre vote à toutes les 30 secondes.

Le Framework ICEfaces fournit un AJAX Poussez la technologie. Ils prennent en charge Traitement évolutive Asynchronous Demande sur différents serveurs d'applications comme la jetée, Tomcat et Glassfish.

Bien que ce soit tous les trucs Java, il peut aider à trouver les termes de recherche Google.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top