Почему этот http-сервер описывается как утечка? - PullRequest
1 голос
/ 18 июня 2020

Этот веб-сайт описывает реализацию 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);

1 Ответ

1 голос
/ 18 июня 2020

http.createServer возвращает объект типа http.Server, который расширяет EventEmitter класс . Теперь EventEmitter позволяет прикреплять к нему слушателей, которые будут выполняться при срабатывании соответствующего event (в данном случае, когда http-сервер получит запрос).

В вашем случае вы прикрепляете 1000 дополнительных слушателей к http-серверу по каждому запросу, который будет выполнять leakyfunc() каждый. Таким образом, у вас потенциально есть огромное количество слушателей, которые необходимо выполнять при каждом запросе, и которые в конечном итоге съедят вашу память кучи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...