Frage

Kontext: Von meinem Javascript Web-UI, starte ich eine lang andauernde (mehrere Minuten) Operation, die auf dem .NET2.0 Backend durchgeführt wird. Der Aufruf liefert sofort mit dem Betrieb ID, während der Langlauf-Betrieb läuft parallel. Die Operationen sind nicht viel CPU-Kapazität, aber langsame Netzgespräche führen. Sobald der Vorgang abgeschlossen ist, möchte ich die Ergebnisse in der Web-Oberfläche sehen.

Frage: Wie kann ich den Client benachrichtigen, wenn die Arbeit erledigt ist

Optionen Ich habe in Betracht gezogen:

Option 1 : Ich starten Sie die lang andauernde Operation asynchron direkt von JS und ich erwarte, dass der Rückgabewert das Endresultat statt eine Operation ID. Meine AJAX-Bibliothek kümmert sich um alles, und das Leben sieht sehr einfach und ordentlich. Das Problem ist, dass auf der Server-Seite der Thread ein Threadpool-Thread ist, die ich nun für einige Minuten sperren . Sie haben nicht zu viele lang laufende parallele Anfragen müssen den Threadpool zu veranlassen, den gesamten Server, um es zu verhungern und bringen die Knie, auch wenn es ausreichend ist, Rechenleistung.

Option 2 : Mit der Operation ID, starte ich den Server abzufragen, wenn der Vorgang abgeschlossen ist. Dies ist jedoch ein Denial-of-Service-Angriff gegen meinen eigenen Server. Darüber hinaus muss es faire Ajax-Lösung es sein. Dies ist kein einzigartiges Problem.

War es hilfreich?

Lösung

Schauen Sie sich WebSync , einen Kometen Implementierung für .NET. Sollte genau das, was Sie suchen.

Andere Tipps

Polling, wenn es richtig gemacht, wird keine nennenswerte Auswirkung auf die Serverlast haben. Sie sollten das Intervall anpassen, um am besten die Besonderheiten Ihres Servers Job abdecken - z Sie fragen den Server nicht für mindestens 2 Minuten, wenn Sie wissen, dass der Betrieb in der Regel länger dauert. Auch nach, dass Sie ein groß genug Intervall wählen - z 10 sec. Mit Hilfe eines Web-Service-Anforderung oder einen benutzerdefinierten Handler wird den Verkehr und die Serverzeit minimieren benötigt, um die Anforderung zu verarbeiten.

Vielleicht Reverse Ajax ist nützlich, wenn Sie zu viele Clients gleichzeitig gewohnt haben. Dies wird manchmal Komet genannt.

Reverse-Ajax bezieht sich auf ein Muster Ajax Designs, dass Anwendungen langlebige HTTP-Verbindungen mit geringer Latenzzeit-Kommunikation zwischen einem Webserver und einem Browser zu aktivieren. Im Grunde ist es eine Möglichkeit, Daten vom Client zum Server zu senden und ein Mechanismus für die Server-Daten an den Browser zurück schieben (was Sie brauchen).

http://en.wikipedia.org/wiki/Reverse_Ajax

Sounds wie es Ihren Bedürfnissen passen könnte, ich es nur verwendet, und es funktionierte wirklich gut.

was versteckt zu haben (oder klein) iframe läuft die lang laufende Skript und machen Sie Javascript nur den Inhalt des iframe zu überprüfen? z.B. Skript schreibt ID an den iframe an seinem Ende.

Ihre Option 2 ist genau das, was ich vorher gemacht habe. Verwenden SetTimeout Ihre Abfrage auf alle 30 Sekunden zu begrenzen oder so.

Die ICEfaces Rahmen eine AJAX Push- Technologie. Sie unterstützen Scalable Asynchrone Verarbeitung anfordern auf verschiedenen Anwendungsservern wie Jetty, Tomcat und Glassfish.

Während diese alle Java-Zeug ist, könnte es helfen, die richtigen Suchbegriffe für Google zu finden.

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