2013-05-28 3 views
2

Je construis un ASP.NET MVC site dans lequel les clients (navigateur) peuvent faire des appels API qui prennent jusqu'à 30 minutes (ou plus ..) procéder. Évidemment je ne pourrais pas employer des contrôleurs normaux de MVC pour faire ceci comme quelques demandes telles bloqueraient tous mes fils de travail d'IIS laissant d'autres appels plus rapides bloqués.ASP.NET MVC contrôleur asynchrone vs Server Push (COMET/Reverse Ajax)

J'ai regardé les deux options suivantes:

  1. contrôleurs ASP.NET MVC de Asynchronous
  2. PokeIn bibliothèque qui permet push serveur via inverse AJAX (longue tenue des requêtes HTTP pour les navigateurs plus anciens) ou WebSockets (à partir de la spécification HTML5 pour les nouveaux navigateurs)

Maintenant, les deux semblent être une bonne option réalisable.

L'option 1 me semble la plus simple à mettre en œuvre. Avec les contrôleurs asynchrones, mes threads de travail IIS ne seraient pas bloqués, permettant ainsi à mes autres appels d'API plus rapides de passer de manière transparente. Cependant à partir du contrôleur asynchrone documentation, je perçois que, il engendre un autre thread non IIS qui serait bloqué/en attente de mon processus de longue durée (30 ~ mins) pour terminer. J'ai lu cela: "Si vous bloquez ou dormez dans un contrôleur, peu importe qu'il soit asynchrone ou non asynchrone, c'est très mauvais." Dans l'option 2, si mes clients utilisent des navigateurs plus récents, qui supportent WebSockets, ce serait peut-être le plus performant car je n'ai besoin d'aucun thread bloquant côté serveur. Lorsque le client déclenche un appel d'API lent, je déclenche un événement, à la fin duquel (par exemple, 30 minutes plus tard), j'élèverais un autre événement pour mettre à jour tous les navigateurs de mes clients avec le contenu mis à jour. Cependant, avec la bibliothèque PokeIn, si une partie de mes clients ne dispose pas de navigateurs supportant WebSocket (les plus anciens), je ne suis pas sûr qu'ils seraient en train d'accaparer un de mes threads de travail IIS.

L'option 2 est-elle trop lourde pour mes besoins? Dans l'option 1 est-il mauvais d'avoir mon contrôleur Async attendre sur le processus lent? Un autre inconvénient de l'option 1 est que si l'utilisateur actualise la page avant la fin de la requête, il ne recevra plus la mise à jour du travail une fois celle-ci terminée!

Toutes les idées, suggestions sont les bienvenues.

Merci

Répondre

0

PokeIn utilise même en mémoire/pools de threads pour pousser les messages pour WebSocket et les connexions ajax car il a serveur websocket interne. Le délai de livraison diffère certainement pour ajax et websocket mais quelle que soit la méthode/option que vous choisissez, vous aurez cette différence. D'ailleurs, vous savez probablement déjà mais Pokein fallback à comet ajax dans le cas où un client ne supporte pas websocket et vous n'avez pas à traiter avec elle.

Espérons que cela répond à votre question pour l'option 2.