Skip to content

Instantly share code, notes, and snippets.

@timdp
Created August 8, 2019 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timdp/21c9aec4d127e8ccb36b05cf65c48881 to your computer and use it in GitHub Desktop.
Save timdp/21c9aec4d127e8ccb36b05cf65c48881 to your computer and use it in GitHub Desktop.
const http = require('http')
const net = require('net')
const { performance } = require('perf_hooks')
const HOST = 'example.com'
const ADDRESS = '93.184.216.34'
const FAMILY = 4
let lookupCountCreateConnection = 0
let lookupCountSocketEvent = 0
const log = (...args) => console.log('[' + String(performance.now().toFixed(3)).padStart(8) + ']', ...args)
const createConnection = (options, cb) => {
log('createConnection()')
const socket = net.createConnection(options, () => {
log('socket connected')
if (cb) {
cb()
}
})
socket.on('lookup', () => {
log('createConnection() -> lookup event')
++lookupCountCreateConnection
})
return socket
}
const lookup = (hostname, options, cb) => {
if (typeof options === 'function') {
cb = options
options = {}
}
process.nextTick(cb, null, ADDRESS, FAMILY)
}
const req = http.request({
host: HOST,
createConnection,
lookup
})
req.on('response', res => {
log('request -> response event')
res.resume()
res.on('end', () => {
log('request -> response event -> end event')
log({ lookupCountCreateConnection, lookupCountSocketEvent })
})
res.on('error', err => {
log('response error:', err)
})
})
req.on('socket', socket => {
log('request -> socket event')
socket.on('lookup', () => {
log('request -> socket event -> lookup event')
++lookupCountSocketEvent
})
})
req.on('error', err => {
log('request error:', err)
})
req.end()
@timdp
Copy link
Author

timdp commented Aug 8, 2019

Output:

[  75.599] createConnection()
[  89.827] createConnection() -> lookup event
[  94.179] request -> socket event
[ 193.222] socket connected
[ 298.619] request -> response event
[ 301.219] request -> response event -> end event
[ 301.530] { lookupCountCreateConnection: 1, lookupCountSocketEvent: 0 }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment