Skip to content

Instantly share code, notes, and snippets.

@delvedor
Last active November 4, 2020 08:58
Show Gist options
  • Save delvedor/0d15a34259fd2d2a21055f6e82a67380 to your computer and use it in GitHub Desktop.
Save delvedor/0d15a34259fd2d2a21055f6e82a67380 to your computer and use it in GitHub Desktop.

With content length header

Node 10

  • keep alive:

    • data
    • request timeout
    • (request hanging for a while)
    • end
    • finished
    • close
  • no keep alive:

    • data
    • end
    • finished
    • close

Node 12

  • keep alive:

    • data
    • request timeout
    • (request hanging for a while)
    • finished
    • end
    • close
  • no keep alive:

    • data
    • finished
    • end
    • close

Node 14

  • keep alive:

    • data
    • request timeout
    • (request hanging for a while)
    • finished
    • close
    • end event never logged
  • no keep alive:

    • data
    • finished
    • close
    • end event never logged

Node 15

  • keep alive:

    • data
    • request timeout
    • (request hanging for a while)
    • finished
    • error: aborted
    • close
    • end event never logged
  • no keep alive:

    • data
    • finished
    • error: aborted
    • close
    • end event never logged

Without content length header

Node 10

  • keep alive:

    • data
    • end
    • finished
  • no keep alive:

    • data
    • end
    • finished
    • close

Node 12

  • keep alive:

    • data
    • end
    • finished
  • no keep alive:

    • data
    • end
    • finished
    • close

Node 14

  • keep alive:

    • data
    • end
    • finished
    • close
  • no keep alive:

    • data
    • end
    • finished
    • close

Node 15

  • keep alive:

    • data
    • end
    • finished
    • close
  • no keep alive:

    • data
    • end
    • finished
    • close
'use strict'
const { finished } = require('stream')
const http = require('http')
function handler (req, res) {
const body = JSON.stringify({ hello: 'world' })
res.setHeader('Content-Type', 'application/json;utf=8')
res.setHeader('Content-Length', body.length + '')
res.end(body.slice(0, -5))
}
const server = http.createServer(handler)
server.listen(0, () => {
// const request = http.request(`http://localhost:${server.address().port}`, {
// agent: new http.Agent({ keepAlive: true, maxSockets: 50 })
// })
const request = http.request(`http://localhost:${server.address().port}`)
request.on('response', response => {
let payload = ''
response.setEncoding('utf8')
response.on('data', chunk => {
console.log('data')
payload += chunk
})
response.on('error', console.error)
response.on('close', () => console.log('close'))
response.on('end', () => {
console.log('end')
console.log(payload)
server.close()
})
finished(response, () => console.log('finished'))
})
request.on('timeout', () => {
console.log('request timeout')
})
request.on('error', err => {
console.error(err)
})
request.on('abort', () => {
console.log('request aborted')
})
request.setTimeout(1000)
request.end()
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment