node.js - 为什么这个 http 服务器被描述为泄漏?
问题描述
这个网站在一篇关于内存泄漏的文章中描述了下面的 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
返回一个http.Server
扩展EventEmitter
类的类型的对象。现在,anEventEmitter
允许将监听器附加到它,一旦触发相应的监听器就会执行event
(在这种情况下,当 http-server 收到请求时)。
在您的情况下,您在每个请求上附加1000
额外的侦听器到 http-server,这将执行leakyfunc()
每个请求。因此,您可能需要在每个请求上执行大量侦听器,最终会耗尽您的堆内存。
推荐阅读
- c# - Razor 将单选框绑定到 SelectListItem 列表
- drop-down-menu - 在 mat-select 上设置选项选择以在选择后返回占位符
- newman - 如何从纽曼捕获响应体
- excel - 使用单个数字用户输入作为范围结束
- c - 当没有参考价值时,它会永远存在吗?
- android - Recyclerview 滚动在嵌套滚动视图中的片段中不起作用
- css - 锯齿形边框 CSS SVG
- pyspark - 动态传递查询字符串以在 PySpark Dataframe 方法 selectExpr() 中选择列
- google-cloud-platform - GCP Compute Engine 将下载限制为 50 K/s?
- python-3.x - python中的嵌套for循环没有完全迭代