为什么这个 http 服务器被描述为泄漏?

Why is this http server described as leaking?

This 网站在 post 中描述了下面关于内存泄漏的 http 服务器实现。它出什么问题了?

const http = require('http');

var server = http.createServer((req, res) => {
 for (var i=0; i<1000; i++) {
 server.on('request', function leakyfunc() {});
 }

 res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
server.setMaxListeners(0);

console.log('Server running at http://127.0.0.1:1337/. Process PID: ', process.pid);

http.createServer returns http.Server 类型的对象,它扩展了 EventEmitter class。现在,EventEmitter 允许将侦听器附加到它,一旦相应的 event 被触发(在这种情况下,当 http-server 收到请求时),它将被执行。

在您的情况下,您将 1000 附加 侦听器附加到每个请求的 http 服务器,这将执行 leakyfunc() 每个。所以你可能有大量的监听器需要在每个请求上执行,最终会耗尽你的堆内存。