【问题标题】:Why is this http server described as leaking?为什么这个 http 服务器被描述为泄漏?
【发布时间】:2020-06-18 17:53:59
【问题描述】:

This 网站在一篇关于内存泄漏的帖子中描述了下面的 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);

【问题讨论】:

    标签: node.js memory-leaks


    【解决方案1】:

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

    在您的情况下,您将 1000 additional 侦听器附加到每个请求的 http-server,这将执行 leakyfunc() each。因此,您可能需要在每个请求上执行大量侦听器,最终会耗尽您的堆内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 2012-06-14
      • 2013-04-27
      • 1970-01-01
      • 2015-08-04
      • 2016-08-03
      相关资源
      最近更新 更多