Knoten Js Probleme mit response.write

8

Wenn ich versuche, die HTTP-Stream-Verbindung aus irgendeinem Grund zu verwenden, wird der Schreibvorgang nicht ausgeführt, bis ich anrufe Antwort.End ()
Ich nehme den Code direkt von der Demo und verstehe nicht, was mein Problem ist Wenn ich mich zum Server wölbe, sind meine Header korrekt.

%Vor%

Warum sendet der Server keine Schreibdaten?

    
Prospero 20.05.2011, 07:31
quelle

5 Antworten

6

Ich bin Browser-spezifisches Verhalten - Firefox zeigt die Daten ("Hello:") sofort an, während Chrome zu puffern scheint und wartet bis die Antwort beendet ist. Beachten Sie, dass chrome auch die Daten sofort anzeigt, wenn Sie zuerst mehr Daten schreiben (z. B. habe ich 1000 "Hallo" geschrieben).

    
Geoff Chappell 20.05.2011, 11:13
quelle
3

Ich glaube, ich verstehe, was du meinst ...

Aus den node.js-Dokumenten:

Beim ersten Aufruf von response.write () werden die gepufferten Header-Informationen und der erste Text an den Client gesendet. Beim zweiten Aufruf von response.write () geht Node davon aus, dass Sie Daten streamen werden, und sendet diese separat. Das heißt, die Antwort wird bis zum ersten Teil des Körpers gepuffert.

Ссылка

(Nice Port Nutzung BTW :))

    
Dve 20.05.2011 07:39
quelle
2

Versuchen Sie, Ihren Code mit telnet oder nc zu überprüfen. Curl puffert normalerweise die letzte Zeile

    
Andrey Sidorov 20.05.2011 11:53
quelle
0

Nachdem Sie die fehlende geschweifte Klammer repariert haben, funktioniert Ihr Code für mich von einem Browser aus. Curl von der Kommandozeile scheint auf die volle Antwort zu warten, aber wireshark bestätigt, dass es chunked encoding verwendet und die Antwort in beiden Fällen in zwei Pakete aufgeteilt wurde.

Ich nehme an, dass die Curl-Ausgabe liniengepuffert ist und nach "World" auf den Zeilenumbruch wartet, bevor etwas gedruckt wird. Sie können dies bestätigen, indem Sie nach "Hallo:" einen weiteren Zeilenumbruch drucken.

    
Jörn Horstmann 20.05.2011 09:47
quelle
0

Dies liegt daran, dass Sie in Ihrem Code an der Position nach res.end('World\n') und vor dem Komma ein umschließendes "}" verpasst haben.

    
Shuping 20.03.2013 08:39
quelle

Tags und Links