web-dev-qa-db-fra.com

Implémentation d'une comète pour ASP.NET?

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 pu 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 répondre une fois qu'il aura reçu un message. Bien sûr, cela ne change pas du tout.

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

102
Doron Yaacoby

Comet est difficile à mettre à l'échelle avec IIS en raison de la connectivité persistante de la comète, mais il y a une équipe qui examine les scénarios de Comet maintenant. Regardez également le blog d'Aaron Lerch comme je crois fait quelques premiers travaux Comet dans ASP.NET.

44
Scott Hanselman

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 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 une prise en charge côté client pour JavaScript, .NET/Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime et .NET Compact, avec une prise en charge côté serveur pour .NET/Mono et PHP.

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

Avertissement: Je travaille pour l'entreprise qui développe ce produit.

33
Anton

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

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

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

15
Jacob

En fait, il existe de nombreux choix pour créer un site Web compatible avec Ajax avec ASP.NET mais honnêtement, PokeIn est le moyen le plus simple de créer un application web supportée par comet ajax. Cela a sauvé l'un des projets de mon entreprise.

4
BigbangO

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

Vous pouvez également consulter Light Streamer Demos

3
Vikram

Le groupe WS-I a publié quelque chose appelé "Reliable Secure Profile" qui a un Glass Glass et implémentation .NET qui apparemment interagit 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 à Silverlight objet pour obtenir des rappels lorsqu'un Push se produit.

Il existe également versions commerciales payantes également.

1
goodguys_activate

Il y a longtemps, j'ai utilisé un site de chat qui utilisait un serveur de streaming http personnalisé. 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 "demande infinie" dans IIS, en particulier dans ASP.NET, car les demandes bloquent un thread de pool de threads (ou IO thread, si les gestionnaires asynchrones sont utilisé) indéfiniment, ce qui signifie que vous ne pouvez gérer autant par serveur que la configuration de votre pool de threads le permet.

Si j'avais un besoin légitime fort pour 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 l'apport pourrait être pertinent.

1
Chris

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 mix). La façon dont cela fonctionne est qu'il laisse une connexion TCP ouverte par session utilisateur, juste pour que le serveur puisse pousser des éléments dans cette connexion de temps en temps pour informer immédiatement l'utilisateur d'un changement ou d'une activité.

0
cruizer