PR-URL: https://github.com/nodejs/node/pull/3128
function OutgoingMessage() {
Stream.call(this);
+ // Queue that holds all currently pending data, until the response will be
+ // assigned to the socket (until it will its turn in the HTTP pipeline).
this.output = [];
this.outputEncodings = [];
this.outputCallbacks = [];
+
+ // `outputSize` is an approximate measure of how much data is queued on this
+ // response. `_onPendingData` will be invoked to update similar global
+ // per-connection counter. That counter will be used to pause/unpause the
+ // TCP socket and HTTP Parser and thus handle the backpressure.
this.outputSize = 0;
this.writable = true;
var outgoingData = 0;
function updateOutgoingData(delta) {
+ // `outgoingData` is an approximate amount of bytes queued through all
+ // inactive responses. If more data than the high watermark is queued - we
+ // need to pause TCP socket/HTTP parser, and wait until the data will be
+ // sent to the client.
outgoingData += delta;
if (socket._paused && outgoingData < socket._writableState.highWaterMark)
return socketOnDrain();