Implémentation Comet pour ASP.NET? [fermé]


103

J'ai cherché des moyens d'implémenter une messagerie de type gmail dans un navigateur et suis arrivé au concept Comet . Cependant, je n'ai pas été en mesure de trouver une bonne implémentation .NET qui me permette de le faire dans IIS (notre application est écrite en ASP.NET 2.0).

Les solutions que j'ai trouvées (ou auxquelles je pourrais penser, d'ailleurs) nécessitent de laisser un thread en cours d'exécution par utilisateur - afin qu'il puisse lui renvoyer une réponse une fois qu'il reçoit un message. Cela ne s'adapte pas du tout, bien sûr.

Ma question est donc la suivante: connaissez-vous une implémentation ASP.NET pour Comet qui fonctionne d'une manière différente? Est-ce même possible avec IIS?


12
Je suppose que l'implémentation initiale bénie par MS est SignalR
user423430

Node.JS est maintenant pris en charge sur Azure, bientôt IIS sur 2003 sera pris en charge. Cela signifie que nous pourrons exécuter le serveur comète dans IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Réponses:


44

Comet est difficile à mettre à l'échelle avec IIS en raison de la connectivité persistante de comet, mais une équipe étudie actuellement les scénarios Comet. Regardez également le blog d'Aaron Lerch car je crois qu'il a fait quelques premiers travaux sur Comet dans ASP.NET.


9
Ceci est effectivement mis en œuvre; consultez WebSync, conformément à la réponse d'Anton ci-dessous. ( Frozenmountain.com/websync )
jvenema

3
Quelqu'un appelé ajax inverse? Vérifiez ceci: pokein.codeplex.com
Zuuum

4
Les contrôleurs asynchrones MVC peuvent aider à lutter contre les problèmes IIS en déchargeant l'attente vers les threads de travail non IIS, voir cet excellent article de Clay Lenhart . Voir également l' exemple de projet de serveur de discussion sur BitBucket.
Jacob

33

WebSync est un serveur Comet évolutif conforme aux normes qui s'intègre directement dans le pipeline IIS / .NET. Il est également disponible sur demande en tant que service hébergé.

Il prend officiellement en charge jusqu'à 20 000 connexions client simultanées par nœud de serveur, mais des tests individuels l'ont vu atteindre 50 000. Le débit des messages est optimal autour de la barre des 1 000 à 5 000 clients simultanés, avec des messages délivrés jusqu'à 300 000 par seconde à partir d'un seul nœud.

Il inclut la prise en charge côté client de JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime et .NET Compact, avec prise en charge côté serveur pour .NET / Mono et PHP.

Le clustering est pris en charge à l'aide de SQL Server ou Azure Caching prêt à l'emploi, mais les fournisseurs personnalisés peuvent être écrits pour à peu près tout (Redis, NCache).

Clause de non-responsabilité: Je travaille pour la société qui développe ce produit.


17
il devrait y avoir un avertissement ici, car c'est votre produit ...
Sam Saffron

9
Bien sûr, il est produit par l'entreprise pour laquelle je travaille :) Certainement pas essayer de cacher quoi que ce soit.
Anton

1
@Anton - ne pas cacher quelque chose n'est pas la même chose que le révéler.
RedFilter

1
@Anton Pouvez-vous en dire plus sur la manière dont il prend en charge jusqu'à 20 000 connexions client simultanées par nœud de serveur? Ces chiffres semblent bien… "trop ​​gros".
Pacerier

1
Je suppose qu'il ne serait pas prudent de demander comment Websync fonctionne sous le capot, conceptuellement - à partir d'une vue de 25 000 pieds bien sûr.
nocarrier le

15

J'ai récemment écrit un exemple simple de serveur de conversation à interrogation longue utilisant des contrôleurs asynchrones MVC 3 basé sur un excellent article de Clay Lenhart

Vous pouvez utiliser l' exemple sur un déploiement AppHarbor que j'ai configuré en fonction de la source du projet BitBucket.

Aussi, plus d'informations disponibles sur mon article de blog expliquant le projet .


j'aime l'exemple sur un déploiement
AppHarbor

'blog post expliquant le projet' -> web.archive.org/web/20130328042214/http
//...

Merci! Heureux que vous ayez aimé l'article.
Clay Lenhart

4

En fait, il existe de nombreux choix pour créer un site Web pris en charge par ajax avec ASP.NET, mais honnêtement, PokeIn est le moyen le plus simple de créer une application Web prise en charge par la comète ajax. Cela a sauvé l'un des projets de mon entreprise.


3

Vous pouvez également regarder la Kaazing Enterprise Gateway qui a fait une version de production de leur passerelle webSocket [HTML5] qui remplace complètement la manière de la comète et permet des connexions en duplex intégral entre les navigateurs et les serveurs d'applications.

Vous pouvez également consulter les démos Light Streamer


1

Il y a longtemps, j'ai utilisé un site de chat qui utilisait un serveur de streaming http personnalisé. En fait, j'ai reproduit ce logiciel à un moment donné par pure curiosité, et c'est assez facile à faire, je pense. Je n'essaierais jamais d'implémenter un type similaire de «requête infinie» dans IIS, en particulier dans ASP.NET, car les requêtes lient indéfiniment un thread de pool de threads (ou un thread IO, si des gestionnaires asynchrones sont utilisés), ce qui signifie que vous ne pouvez gérer autant par serveur que votre configuration de pool de threads le permet.

Si j'avais un besoin légitime fort d'une telle fonctionnalité, j'écrirais honnêtement un serveur http personnalisé pour cela.

Je sais que cela ne répond pas vraiment à votre question, mais j'ai pensé que la contribution pourrait être pertinente.


1

Le groupe WS-I a publié quelque chose appelé "Reliable Secure Profile" qui a une implémentation Glass Fish et .NET qui interagissent apparemment bien.

Avec un peu de chance, il existe également une implémentation Javascript .

Il existe également une implémentation Silverlight qui utilise HTTP Duplex. Vous pouvez connecter javascript à l' objet Silverlight pour obtenir des rappels lorsqu'une poussée se produit.

Il existe également des versions commerciales payantes .


4
Publier en masse la même réponse sur un certain nombre de questions dans une courte succession a tendance à déclencher quelques drapeaux ...
Marc Gravell

2
( psst )

0

Je pense que l'approche Comet n'est pas vraiment évolutive à moins que vous ne soyez prêt à étendre la ferme Web horizontalement (en ajoutant plus de serveurs Web au mélange). La façon dont cela fonctionne est qu'il laisse une connexion TCP ouverte par session utilisateur, juste pour que le serveur puisse envoyer des éléments dans cette connexion de temps en temps pour informer immédiatement l'utilisateur d'un changement ou d'une activité.


6
Tout n'est évolutif que verticalement jusqu'à un point, après quoi une mise à l'échelle horizontale doit avoir lieu.
Anton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.