@@ -52,15 +52,27 @@ function parseWebSocketRequest (socket, opts, params) {
5252 throw new Error ( 'invalid action in WS request: ' + params . action )
5353 }
5454
55- params . ip = opts . trustProxy
56- ? socket . upgradeReq . headers [ 'x-forwarded-for' ] || socket . upgradeReq . connection . remoteAddress
57- : socket . upgradeReq . connection . remoteAddress . replace ( common . REMOVE_IPV4_MAPPED_IPV6_RE , '' ) // force ipv4
58- params . port = socket . upgradeReq . connection . remotePort
59- if ( params . port ) {
60- params . addr = ( common . IPV6_RE . test ( params . ip ) ? '[' + params . ip + ']' : params . ip ) + ':' + params . port
55+ // On first parse, save important data from `socket.upgradeReq` and delete it
56+ // to reduce memory usage.
57+ if ( socket . upgradeReq ) {
58+ socket . ip = opts . trustProxy
59+ ? socket . upgradeReq . headers [ 'x-forwarded-for' ] || socket . upgradeReq . connection . remoteAddress
60+ : socket . upgradeReq . connection . remoteAddress . replace ( common . REMOVE_IPV4_MAPPED_IPV6_RE , '' ) // force ipv4
61+ socket . port = socket . upgradeReq . connection . remotePort
62+ if ( socket . port ) {
63+ socket . addr = ( common . IPV6_RE . test ( socket . ip ) ? '[' + socket . ip + ']' : socket . ip ) + ':' + socket . port
64+ }
65+
66+ socket . headers = socket . upgradeReq . headers
67+
68+ // Delete `socket.upgradeReq` when it is no longer needed to reduce memory usage
69+ socket . upgradeReq = null
6170 }
6271
63- params . headers = socket . upgradeReq . headers
72+ params . ip = socket . ip
73+ params . port = socket . port
74+ params . addr = socket . addr
75+ params . headers = socket . headers
6476
6577 return params
6678}
0 commit comments