2010-08-04 8 views
6

Ich habe einen Javascript-basierten Client, der derzeit einen .NET-Webdienst nach neuen Inhalten abfragt. Während das Absenden funktioniert ... bin ich mit diesem Ansatz nicht zufrieden, da ich Systemressourcen verwende und Overhead verursache, wenn keine Änderungen zu empfangen sind.Nachrichten von einer serverseitigen Anwendung an Clients senden?

Meine Frage ist, wie benachrichtigen ich meinen Klienten (n), dass es neue Inhalte für sie angezeigt werden? Ich bin offen für zusätzliche Technologien, mit denen ich diese Lösung implementieren könnte.

Antwort

7

Zu allererst Polling ist der Weg zu gehen. Sie können es mit Flash oder Silverlight oder Comet tun - http://en.wikipedia.org/wiki/Comet_(programming), die eine TCP-Verbindung offen für Sie für Benachrichtigungen halten kann. Eine Webseite selbst kann keinen Socket offen halten, daher gibt es keine Möglichkeit, einen Web-Client direkt zu benachrichtigen.

[Bearbeiten] Aber denken Sie daran, wie viele Client kann gleichzeitig eine TCP-Verbindung zu einem Server halten? Bei einem größeren System sind die verfügbaren Sockets ziemlich schnell erschöpft, da 65k-Ports verfügbar sind.
Wie viele gleichzeitige Verbindungen Ihr Server verarbeiten kann, hängt von Ihren Hardwareressourcen ab. Wenn Sie genug Speicher und CPU haben, sollten Sie in der Lage sein, ~ 100k und vielleicht mehr zu handhaben. Wenn jedoch jede Anfrage über tcp/ip auf eine Datenbank oder eine andere Ressource zugreift, kann die Anzahl der verfügbaren Ports pro IP (65k) begrenzt sein. Sie sollten die Push-Anforderungen auch gegen eine separate Domäne richten, da ein Browser normalerweise zwei gleichzeitige Verbindungen pro Domäne festlegt, sodass Sie das normale Laden der Seite nicht beeinträchtigen.

Polling in Kombination mit Cache-Servern in der Front ist eine gute Lösung. Sie können Logik auf dem Server haben, der den Cache pro Client aktualisiert, wodurch die Belastung für jede Abfrage reduziert wird. Sie können den Cache für Benutzer aktualisieren, die sich innerhalb der X-Minutenanzahl angemeldet/abgefragt haben, um die Aktualisierung des Caches noch weiter zu reduzieren. Und für mich ist das Implementieren von Pull einfacher als das Ziehen, technologisch.

+1

Ja, es kann ohne Flash und Silverlight gemacht werden; Siehe die Antworten zu http://en.wikipedia.org/wiki/Comet_%28programming%29 –

+1

@Marcel: danke .. meine Antwort bearbeitet, um das zu reflektieren. –

+0

Große Antwort, das gab mir einige gute Plätze, um zu suchen. – Achilles

2

Sie sollten über COMET forschen.

COMET ist eine Technik, die einen Server schieben Daten an den Client-Browser über einen HTTP offene Kommunikation ermöglichen.

Wahrscheinlich gibt es Beispiele über COMET + overthere WCF Web Services.

1

Sie wurden bereits über HTTP-Polling (COMET) informiert. Dies lässt die Frage offen, wie der HTTP-Server selbst (IIS + ASP) die Änderungen in der Datenbank erkennt, ohne die Datenbank abzufragen. Mit SQL Server können Sie eine Technologie wie Query Notifications verwenden, mit der Ihr ASP.Net-Prozess benachrichtigt werden kann, wenn eine Änderung in der Datenbank eines zwischengespeicherten Datensatzes auftritt. Sie können auch das Projekt LinqToCache auschecken, in dem Query Notification mit LINQ-Abfragen gemischt werden kann.

2

Schauen Sie sich WebSync, eine Comet-Lösung für .NET/IIS. Es wird genau das tun, wonach Sie suchen. Kein zusätzliches Polling verschwendet Ressourcen, schiebt nur bei Bedarf, Echtzeit-Updates ... die ganzen 9 Yards.

Verwandte Themen