为什么这个 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()
每个。所以你可能有大量的监听器需要在每个请求上执行,最终会耗尽你的堆内存。
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()
每个。所以你可能有大量的监听器需要在每个请求上执行,最终会耗尽你的堆内存。