2008-09-15 5 views
102

Ich habe nach Möglichkeiten gesucht, Google Mail-ähnliche Nachrichten in einem Browser zu implementieren, und habe das Konzept Comet erreicht. Ich konnte jedoch keine gute .NET-Implementierung finden, die es mir ermöglicht, dies in IIS zu tun (unsere Anwendung ist in ASP.NET 2.0 geschrieben).Comet-Implementierung für ASP.NET?

Die Lösungen, die ich gefunden habe (oder denken könnte), erfordern einen laufenden Thread pro Benutzer - damit er eine Antwort an ihn zurückgeben kann, sobald er eine Nachricht erhält. Dies skaliert natürlich überhaupt nicht.

Meine Frage ist also - wissen Sie von einer ASP.NET-Implementierung für Comet, die auf andere Weise funktioniert? Ist das überhaupt mit IIS möglich?

+12

Ich denke, die anfängliche MS-gesegnet Implementierung SignalR ist: http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx – user423430

+0

Node.JS jetzt auf Azure unterstützt wird, IIS bald auf 2003 unterstützt werden. Das bedeutet, dass wir den Comet-Server innerhalb von IIS betreiben können (http://www.windowsazure.com/en-us/develop/nodejs/). – LamonteCristo

Antwort

44

Comet ist aufgrund der ständigen Konnektivität von Kometen schwierig mit IIS zu skalieren, aber es gibt jetzt ein Team, das sich mit Comet-Szenarien befasst. Sehen Sie sich auch Aaron Lerch's blog an, da ich glaube, dass er einige frühe Comet-Arbeiten in ASP.NET erledigt hat.

+9

Dies ist tatsächlich implementiert; schau dir WebSync an, wie unten in Antons Antwort. (http://www.frozenmountain.com/websync/) – jvenema

+3

Hat jemand Reverse Ajax genannt? Überprüfen Sie dies: http://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 abladen, siehe [Great Post von Clay Lenhart] (http://clay.lenharts.com) .net/blog/2010/10/19/websockets-is-cool-aber-was-kannst-du-kannst-heute). Siehe auch [Chat Server Beispielprojekt] (https://bitbucket.org/jacob4u2/mvcchatsite/src) auf BitBucket. – Jacob

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 Web-Server hinzufügen). Die Funktionsweise besteht darin, dass eine TCP-Verbindung pro Benutzersitzung geöffnet bleibt, damit der Server von Zeit zu Zeit Zugriff auf diese Verbindung hat, um den Benutzer sofort über Änderungen oder Aktivitäten zu informieren.

+6

Alles ist nur vertikal skalierbar bis zu einem Punkt, nach dem die horizontale Skalierung erfolgen muss Ort. – Anton

3

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

Sie auch bei Light Streamer Demos

33

WebSync aussehen könnte, ist ein standardkonforme skalierbare Comet-Server, der direkt in die IIS/.NET-Pipeline integriert. Es ist auch auf Anfrage als gehosteter Dienst verfügbar.

Es unterstützt offiziell bis zu 20.000 gleichzeitige Clientverbindungen pro Serverknoten, aber einzelne Tests haben gesehen, dass es so hoch wie 50.000 geht. Der Nachrichtendurchsatz ist optimal um die 1.000-5.000 gleichzeitige Clients herum, wobei Nachrichten von einem einzelnen Knoten bis zu 300.000 pro Sekunde geliefert werden.

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

Clustering wird entweder mit SQL Server oder Azure Caching unterstützt, aber benutzerdefinierte Provider können für fast alles (Redis, NCache) geschrieben werden.

Haftungsausschluss: Ich arbeite für die Firma, die dieses Produkt entwickelt.

+16

sollte hier ein Disclaimer sein, da es Ihr Produkt ist ... –

+9

Sicher, es wird von der Firma produziert, für die ich arbeite :) Definitiv nicht versuchen, irgendetwas zu verbergen. – Anton

+1

@Anton - etwas nicht zu verstecken ist nicht dasselbe wie es zu offenbaren. – RedFilter

1

Ich habe einmal eine Chat-Site verwendet, die einen benutzerdefinierten HTTP-Streaming-Server verwendet. Ich habe diese Software tatsächlich aus reiner Neugier reproduziert, und es ist einfach genug, denke ich. Ich würde niemals versuchen, eine ähnliche Art von "unendlicher Anfrage" in IIS, insbesondere in ASP.NET, zu implementieren, da die Anfragen einen Thread-Pool-Thread (oder IO-Thread, wenn asynchrone Handler verwendet werden) unbegrenzt binden, was bedeutet, dass Sie nur können behandeln Sie so viel pro Server, wie Ihre Thread-Pool-Konfiguration ermöglicht.

Wenn ich eine starke legitime Notwendigkeit für solche Funktionalität hatte, würde ich ehrlich einen benutzerdefinierten http-Server dafür schreiben.

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

4

Eigentlich gibt es viele Möglichkeiten, Ajax-unterstützte Website mit ASP.NET zu erstellen, aber ehrlich gesagt, PokeIn ist der einfachste Weg, um einen Kometen Ajax-unterstützte Web-Anwendung zu erstellen. Es hat eines der Projekte meiner Firma gerettet.

15

ich ein simple example of a Long Polling Chat Server mit MVC 3 Async Controller schrieb kürzlich auf einem great article by Clay Lenhart

basiert

können Sie die example on a AppHarbor deployment verwenden stelle ich aus dem BitBucket Projekt auf der Grundlage der Quelle auf.

Weitere Informationen finden Sie unter meiner blog post explaining the project.

+0

Ich mag das Beispiel auf einer AppHarbor-Bereitstellung – guaike

+0

'Blogbeitrag erklärt das Projekt' -> https://web.archive.org/web/20130328042214/http://jacob4u2.posterous.com/mvc-3-long- polling-comet-chat-example – jaybro

1

Die WS-I-Gruppe veröffentlicht etwas namens "Reliable Secure Profile", die eine Glasfische und .NET implementation hat, die offenbar inter-operate gut.

Mit etwas Glück gibt es auch eine Javascript Implementierung da draußen.

Es gibt auch eine Silverlight-Implementierung, die verwendet HTTP Duplex. Sie können connect javascript to the Silverlight Objekt, um Rückrufe zu erhalten, wenn ein Push auftritt.

Es gibt auch commercial paid versions ebenso.

+4

Das Bulk-Posting der exakt gleichen Antwort über eine Reihe von Fragen in kurzer Folge tendiert dazu, ein paar Flags zu stolpern ... –

+2

([psst] (http://meta.stackexchange.com/questions/ 88078/was-tun-über-diese-Antwort-Duplikate)) – Will