2008-09-15 5 views
102

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

Les solutions que j'ai trouvé (ou pourrait penser, d'ailleurs) stipulent qu'on doit laisser un fil en cours d'exécution par utilisateur - pour qu'il puisse renvoyer une réponse à lui une fois qu'il reçoit un message. Cela ne va pas du tout, bien sûr.

Donc ma question est - connaissez-vous d'une implémentation ASP.NET pour Comet qui fonctionne d'une manière différente? Est-ce encore possible avec IIS?

+12

Je suppose que la mise en œuvre bénie MS initiale est SignalR: http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx – user423430

+0

Node.JS est désormais pris en charge sur Azure, IIS bientôt sur 2003 sera pris en charge. Cela signifie que nous serons en mesure d'exécuter le serveur de comètes dans IIS (http://www.windowsazure.com/en-us/develop/nodejs/) – LamonteCristo

Répondre

44

Comet est difficile à l'échelle avec IIS en raison de la connectivité persistante de la comète, mais il y a une équipe à la recherche de scénarios Comet maintenant. Regardez également Aaron Lerch's blog car je crois qu'il a fait un peu de travail Comet au début dans ASP.NET.

+9

Ceci est réellement implémenté; Découvrez WebSync, par la réponse d'Anton ci-dessous. (http://www.frozenmountain.com/websync/) – jvenema

+3

Est-ce que quelqu'un a appelé inverse ajax? vérifier ceci dehors: http://pokein.codeplex.com – Zuuum

+4

Les contrôleurs asynchrones de MVC peuvent aider à combattre les problèmes d'IIS en déchargeant l'attente aux threads de travail non d'IIS, voient ceci [grand article par Clay Lenhart] (http: //clay.lenharts .net/blog/2010/10/19/websockets-est-cool-mais-que-pouvez-vous-faire-aujourd'hui). Voir aussi [Exemple de projet de serveur de chat] (https://bitbucket.org/jacob4u2/mvcchatsite/src) sur BitBucket. – Jacob

0

Je pense que l'approche Comet est pas vraiment évolutive, sauf si vous êtes prêt à développer 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 d'utilisateur, juste pour que le serveur puisse pousser des choses 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 la mise à l'échelle horizontale doit prendre endroit. – Anton

3

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

Vous pouvez également regarder Light Streamer Demos

33

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

Il soutient officiellement jusqu'à 20.000 connexions client simultanées par nœud de serveur, mais les tests individuels ont vu aller aussi haut que 50 000. Le débit des messages est optimal autour de la marque de 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 pour JavaScript, .NET/Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime et .NET Compact, avec le support côté serveur pour .NET/Mono et PHP.

Clustering est pris en charge en utilisant SQL Server ou Caching Azure hors de la boîte, mais les fournisseurs personnalisés peuvent être écrit pour à peu près tout (Redis, NCache).

Avis de non-responsabilité: Je travaille pour l'entreprise qui développe ce produit.

+16

il devrait y avoir une clause de non-responsabilité ici, car c'est votre produit ... –

+9

Bien sûr, il est produit par la société 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 de le divulguer. – RedFilter

1

Une fois, j'ai utilisé un site de discussion qui utilisait un serveur de streaming http personnalisé. J'ai effectivement reproduit ce logiciel à un moment donné par simple 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 bloquent un thread de thread (ou un thread IO, si des gestionnaires asynchrones sont utilisés) indéfiniment, 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 fort besoin légitime 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 je pensais que l'entrée pourrait être pertinente.

4

En fait, il y a beaucoup de choix pour créer le site pris en charge ajax avec ASP.NET, mais honnêtement, PokeIn est la meilleure façon de créer une application Web pris en charge ajax comète. Il a sauvé un des projets de mon entreprise.

15

j'ai écrit récemment un simple example of a Long Polling Chat Server utilisant MVC 3 contrôleurs Async basés sur une great article by Clay Lenhart

Vous pouvez utiliser le example on a AppHarbor deployment je mis en place en fonction de la source du projet bitbucket.

En outre, plus d'informations sont disponibles à partir de blog post explaining the project.

+0

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

+0

'article de blog expliquant le projet' -> https://web.archive.org/web/20130328042214/http://jacob4u2.posterous.com/mvc-3-long- polling-comet-chat-example – jaybro

1

Le groupe WS-I a publié quelque chose appelé "Reliable Secure Profile" qui a un poisson de verre et .NET implementation qui apparemment inter-operate 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 connect javascript to the Silverlight objet pour obtenir des rappels lorsqu'un push se produit. Il y a aussi commercial paid versions également.

+4

La publication en bloc de la même réponse sur un certain nombre de questions en succession courte a tendance à déclencher quelques drapeaux ... –

+2

([psst] (http://meta.stackexchange.com/questions/ 88078/quoi-faire-à propos de-ces-réponses-dupes)) – Will