Frage

Ich möchte auf einer Webseite (basierend auf einer Statusfeld in einer Datenbanktabelle, die von einem externen Prozess verändert wird) Updates in Echtzeit angezeigt werden soll. Auf der Grundlage meiner Forschung, gibt es mehrere Möglichkeiten, dies zu tun.

  • Long Polling (Comet) - Dies scheint komplex zu implementieren
  • Regelmäßige Polling - Ich kann ein AJAX-Methode Trigger haben eine Datenbank alle 5 Sekunden traf den aktuellen Status zu erhalten. Aber ich fürchte, das wird Performance-Probleme haben.

Dann las ich über SqlCacheDependency mit - im Grunde die Cache basiert in der Tabelle auf ein Feld ungültig gemacht wird. Ich gehe davon aus ich das Ereignis trigerred verwenden können, wenn der Cache für ungültig erklärt wird dem Benutzer das neue Update zu zeigen?

Was ist eine einfache Lösung, die nicht Performance-Probleme haben?

War es hilfreich?

Lösung

Statt Abfrage der Datenbank eine skalierbare und performante Ansatz zur Umfrage für die Existenz einer Datei auf Ihrem Web-Server, so etwas wie eine leichte js Datei wäre. Der Inhalt der Datei ist nicht wichtig, aber um Ihnen eine Idee gibt Sie ein JSON-Objekt von einer Art haben könnten, die das Ergebnis des Prozesses näher beschreibt.

Dann wird Ihr Hintergrundprozess, den die Verarbeitung als letzten Schritt tun kann die Datei erstellen oder einen Web-Dienst auf Ihrem Web-Tier rufen zu tun.

Hier ist, wie es funktionieren könnte.

Benutzer drückt Taste, die Beiträge zum Server

Server Kicks von Prozess und gibt eine Kennung z.B. C3201620-E622-4fe2-9F3A-E02FFA613F59

Web UI fragt dann peridodically für die Existenz von C3201620-E622-4fe2-9F3A-E02FFA613F59.js würde das Javascript, um die 404-Fehler verwalten und ein neuer Versuch gestartet, bis er eine 200 empfängt

Hope dies gibt Ihnen einige Ideen.

Codebeispiel 404 ist in jQuery zu behandeln

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

Andere Tipps

Sie haben 2 Ausgaben:

  1. Abrufen der Daten zu Push
  2. Schieben Sie die Daten an die Clients

Artikel # 1 ist einfach, vorausgesetzt, Sie haben eine ziemlich effiziente Abfrage haben, und du bist es nicht für jeden Benutzer abzufragen; nur Abfrage, erhalten die Daten, und es schieben. Sie könnten die SqlDependency Option verwenden, oder Sie können es einfach abfragen; es hängt davon ab, wie schwer Ihre Daten.

Artikel # 2 ist ein wenig komplizierter, weil Sie brauchen werden, um entweder den Server ständig schlagen, oder einen Kometen-Server verwenden. Wir haben eine hoch skalierbare .NET Komet-Server geschrieben, WebSync , über auf Gefrorenes Berg, die passen könnte Rechnung. Im Wesentlichen haben Sie einen separaten Prozess, dass treibt die Veröffentlichung und WebSync das Schieben der Daten zu Ihren Kunden umgehen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top