Wie kann man "chunked" Antworten anzeigen, sobald sie in AngularJS ankommen?

9

Zur Zeit habe ich ein Problem damit, "Chunks" der Antworten anzuzeigen, die ich von meinem Web Service Node.js Server (localhost: 3000) an einen simulierten Client auf einem Node.js Server (localhost: 3001) sende. p>

  • edit * - Die aktuelle Implementierung verwendet nur Angulars% http als Transport ohne Web-Sockets

Die Logik lautet wie folgt:

1. Erstellen Sie ein Array auf der Client-Seite von "Cities" und senden Sie sie (vom AngularJS-Controller) an den Web-Service unter: localhost: 3000 / getMatrix

%Vor%


2. Der Web-Service durchläuft dann seinen Prozess, um eine Matrix von "Städten" zu erstellen (z. B. wenn er 5 Städte passiert, würde er eine JSON-Matrix von 5 mal 5 [25 Elemente] zurückgeben). Aber der Haken ist, dass es die Daten in "Chunks" dank Node's & gt; response.write ( Daten )

Randnotiz - Node.js legt 'Transfer-Encoding' automatisch fest: 'chunked' in der Kopfzeile

%Vor%


Gegenwärtig ist das Problem nicht , dass die 'chunked' Antwort ihr Ziel nicht erreicht, aber dass ich keine Möglichkeit kenne, mit der Verarbeitung der Daten zu beginnen, sobald die Chunks eingehen.

Dies ist ein Problem, da ich versuche, eine Matrix von 250x250 zu erstellen und auf die volle Antwort zu warten, um die Ergebnisse von Angular anzuzeigen, da es versucht, alles gleichzeitig zu tun (wodurch die Seite aufgebläht wird).

Dies ist auch ein Problem, da ich versuche, die Antwort auf MongoDB zu speichern, und es kann nur eine bestimmte Datenmenge verarbeiten, bevor sie für MongoDB zu groß ist.

Ich habe versucht, Angulars $ q und das Versprechen / API verzögern , aber ich bin ein wenig verwirrt darüber, wie man es implementiert und habe keine Möglichkeit gefunden, Datenblöcke zu verarbeiten, sobald sie eintreffen.

Diese Frage zu SO über den Handel mit Stücken schien auch nicht viel zu helfen.

Jede Hilfe oder Tipps zum Versuch, Daten in Chunks anzuzeigen, wenn sie zu AngularJS zurückkommen, wäre sehr willkommen.

Wenn die Antworten informative Code-Snippets sein könnten, die die Technik demonstrieren, würde ich es sehr schätzen, da das Sehen eines Beispiels mir hilft, mehr als eine "Text" -Beschreibung zu lernen.

- Danke

    
The1Kast 28.02.2014, 19:16
quelle

1 Antwort

3

Kein Beispiel, weil ich nicht sicher bin, was Sie in Bezug auf den Transportcode verwenden / wenn Sie einen Websocket verfügbar haben:

$ http unterstützt keine der Callbacks, bis am Ende der Anfrage ein Erfolgscode zurückgegeben wird - er wartet auf .onreadystatechange mit einem 200 -ähnlichen Wert.

Wenn Sie einen Stream wie diesen verwenden möchten, müssen Sie entweder $http verwenden und ihn in eine Transportschicht umwandeln, die mehrere $http -Aufrufe aufruft, die alle enden und einen Erfolgsheader zurückgeben.

Sie könnten auch websockets verwenden und statt $http ein Ereignis im Socket ausgeben.

Um die Blöcke wieder in den Client zu bekommen, muss der Server jeden Block als neues Ereignis im Backend ausgeben und das Front-End auf dieses Ereignis warten lassen und die Verarbeitung für jeden einzelnen durchführen.

    
Andrew Templeton 28.02.2014, 21:26
quelle