diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js index 4c87a360c61874..7bf8d563e55455 100644 --- a/lib/_http_outgoing.js +++ b/lib/_http_outgoing.js @@ -46,9 +46,16 @@ utcDate._onTimeout = function() { 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; diff --git a/lib/_http_server.js b/lib/_http_server.js index 2d6cb53176423b..c11d36912e27e7 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -265,6 +265,10 @@ function connectionListener(socket) { 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();