Comet-Implementierung für ASP.NET? [geschlossen]

103

Ich habe nach Möglichkeiten gesucht, Google Mail-ähnliches Messaging in einem Browser zu implementieren, und bin zum Comet- Konzept gekommen. Es ist mir jedoch nicht gelungen, eine gute .NET-Implementierung zu finden, mit der ich dies in IIS tun kann (unsere Anwendung ist in ASP.NET 2.0 geschrieben).

Für die Lösungen, die ich gefunden habe (oder an die ich denken könnte), muss pro Benutzer ein laufender Thread hinterlassen werden, damit er eine Antwort erhält, sobald er eine Nachricht erhält. Das skaliert natürlich überhaupt nicht.

Meine Frage lautet also: Kennen Sie eine ASP.NET-Implementierung für Comet, die anders funktioniert? Ist das mit IIS überhaupt möglich?

Doron Yaacoby
quelle
12
Ich denke, die erste MS-gesegnete Implementierung ist SignalR: hanselman.com/blog/…
user423430
Node.JS wird jetzt in Azure unterstützt, in Kürze wird IIS in 2003 unterstützt. Das heißt, wir können den Kometenserver in IIS ( windowsazure.com/en-us/develop/nodejs )
ausführen

Antworten:

44

Comet ist aufgrund der anhaltenden Konnektivität von Comet schwierig mit IIS zu skalieren, aber es gibt ein Team, das sich derzeit mit Comet-Szenarien befasst. Schauen Sie sich auch Aaron Lerchs Blog an, da er meiner Meinung nach einige frühe Kometenarbeiten in ASP.NET durchgeführt hat.

Scott Hanselman
quelle
9
Dies ist tatsächlich implementiert; Schauen Sie sich WebSync an, wie in Antons Antwort unten angegeben. ( Frozenmountain.com/websync )
Jvenema
3
Hat jemand Reverse Ajax genannt? Überprüfen Sie dies heraus: pokein.codeplex.com
Zuuum
4
MVC Async Controller können helfen, die IIS-Probleme zu bekämpfen, indem sie das Warten auf Nicht-IIS-Worker-Threads verlagern. Siehe diesen großartigen Beitrag von Clay Lenhart . Siehe auch Chat Server-Beispielprojekt auf BitBucket.
Jacob
33

WebSync ist ein standardkonformer skalierbarer Comet-Server, der direkt in die IIS / .NET-Pipeline integriert wird. Es ist auch auf Anfrage als gehosteter Dienst verfügbar.

Es werden offiziell bis zu 20.000 gleichzeitige Clientverbindungen pro Serverknoten unterstützt, bei einzelnen Tests wurden jedoch bis zu 50.000 erreicht. Der Nachrichtendurchsatz ist um die Marke von 1.000 bis 5.000 gleichzeitigen Clients optimal, wobei Nachrichten von einem einzelnen Knoten bis zu 300.000 pro Sekunde übermittelt werden.

Es umfasst clientseitige Unterstützung für JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime und .NET Compact sowie serverseitige Unterstützung für .NET / Mono und PHP.

Clustering wird standardmäßig mit SQL Server oder Azure Caching unterstützt, benutzerdefinierte Anbieter können jedoch für nahezu alles geschrieben werden (Redis, NCache).

Haftungsausschluss: Ich arbeite für das Unternehmen, das dieses Produkt entwickelt.

Anton
quelle
17
Es sollte hier einen Haftungsausschluss geben, da es Ihr Produkt ist ...
Sam Saffron
9
Sicher, es wird von der Firma produziert, für die ich arbeite :) Ich versuche definitiv nicht, etwas zu verbergen.
Anton
1
@Anton - etwas nicht zu verstecken ist nicht dasselbe wie es preiszugeben.
RedFilter
1
@Anton Können Sie näher erläutern, wie bis zu 20.000 gleichzeitige Clientverbindungen pro Serverknoten unterstützt werden? Diese Zahlen sehen gut aus ... "zu groß".
Pacerier
1
Ich nehme an, es wäre nicht ratsam zu fragen, wie Websync konzeptionell unter der Haube funktioniert - natürlich aus einer Sicht von 25.000 Fuß.
Nocarrier
15

Ich habe kürzlich ein einfaches Beispiel für einen Long Polling Chat Server mit MVC 3 Async Controllern geschrieben, das auf einem großartigen Artikel von Clay Lenhart basiert

Sie können das Beispiel für eine AppHarbor-Bereitstellung verwenden, die ich basierend auf der Quelle aus dem BitBucket-Projekt eingerichtet habe.

Weitere Informationen finden Sie in meinem Blog-Beitrag, in dem das Projekt erläutert wird .

Jacob
quelle
Ich mag das Beispiel auf einer AppHarbor-Bereitstellung
guaike
'Blog-Beitrag zur Erklärung des Projekts' -> web.archive.org/web/20130328042214/http://…
Jaybro
Vielen Dank! Ich bin froh, dass dir der Artikel gefallen hat.
Clay Lenhart
4

Eigentlich gibt es viele Möglichkeiten, eine von Ajax unterstützte Website mit ASP.NET zu erstellen, aber ehrlich gesagt ist PokeIn der einfachste Weg, eine von Ajax unterstützte Webanwendung für Kometen zu erstellen. Es hat eines der Projekte meiner Firma gerettet.

BigbangO
quelle
3

Sie können sich auch das Kaazing Enterprise Gateway ansehen das eine Produktionsversion seines webSocket [HTML5] -Gateways veröffentlicht hat, das den Kometenweg vollständig ersetzt und Vollduplexverbindungen zwischen Browsern und Anwendungsservern ermöglicht.

Sie können sich auch Light Streamer-Demos ansehen

Vikram
quelle
1

Ich habe vor langer Zeit einmal eine Chat-Site verwendet, die einen benutzerdefinierten http-Streaming-Server verwendet. Ich habe diese Software tatsächlich einmal aus purer Neugier reproduziert, und es ist einfach genug, denke ich. Ich würde niemals versuchen, eine ähnliche Art von "unendlicher Anforderung" in IIS zu implementieren, insbesondere in ASP.NET, da die Anforderungen einen Thread-Pool-Thread (oder einen E / A-Thread, wenn asynchrone Handler verwendet werden) auf unbestimmte Zeit binden, was bedeutet, dass Sie dies nur können Behandeln Sie so viel pro Server, wie Ihre Thread-Pool-Konfiguration zulässt.

Wenn ich ein starkes legitimes Bedürfnis nach solchen Funktionen hätte, würde ich ehrlich gesagt einen benutzerdefinierten http-Server dafür schreiben.

Ich weiß, dass Ihre Frage nicht wirklich beantwortet wird, aber ich dachte, die Eingabe könnte relevant sein.

Chris
quelle
1

Die WS-I - Gruppe veröffentlicht etwas namens „Zuverlässig Sicher Profil“ , das eine Glasfische und hat .NET - Implementierung , dass scheinbar inter funktionieren gut.

Mit etwas Glück gibt es auch eine Javascript- Implementierung.

Es gibt auch eine Silverlight-Implementierung, die HTTP-Duplex verwendet. Sie können Javascript mit dem Silverlight- Objekt verbinden, um Rückrufe zu erhalten, wenn ein Push auftritt.

Es gibt auch kommerzielle kostenpflichtige Versionen .

goodguys_activate
quelle
4
Das Massenposting der exakt gleichen Antwort über eine Reihe von Fragen in kurzer Folge neigt dazu, ein paar Flaggen
auszulösen
2
( psst )
0

Ich denke, der Comet-Ansatz ist nicht wirklich skalierbar, es sei denn, Sie sind bereit, die Webfarm horizontal zu erweitern (indem Sie dem Mix weitere Webserver hinzufügen). Die Funktionsweise besteht darin, dass eine TCP-Verbindung pro Benutzersitzung offen bleibt, sodass der Server von Zeit zu Zeit Daten in diese Verbindung verschieben kann, um den Benutzer sofort über eine Änderung oder Aktivität zu informieren.

Kreuzer
quelle
6
Alles ist nur vertikal bis zu einem Punkt skalierbar, wonach eine horizontale Skalierung erfolgen muss.
Anton