Как предотвратить утечки памяти на потоковом сервере http / s в node.js? - PullRequest
3 голосов
/ 06 января 2012

Я создал потоковый https-сервер, который опрашивает серверную службу и записывает данные в http-клиент, если он доступен. Код для конкретного запроса https выглядит следующим образом:

// check for new stuff periodically
var timer = setInterval( function() {
                   var resp = getResponseObject();
                   response.write(resp + "\n\r");
               }, 500);

// stop looping when the client disconnects
request.on('close', function() {
             clearInterval(timer);
             return;
             });

Когда клиент отключается, тайм-аут очищается и цикл останавливается. Но всегда ли будет происходить это закрытие? Также на не очень чистом клиентском разъединении? Я беспокоюсь о том, чтобы оставить петли для соединений, которые больше не на месте. Есть идеи, если это безопасно? Другие подходы?

Спасибо!

1 Ответ

3 голосов
/ 06 января 2012

Я не думаю, что вам нужно беспокоиться о «нечистых» разъединениях - когда клиентские машины внезапно удаляются из сети, ваш сервер в конечном итоге получит либо пакеты TCP FIN, либо сообщения ICMP Destination Unreachable, которые будут вызыватьclose событие на вашем сервере и позволяет вам очистить.

Что, вероятно, более ресурсоемким будет сотни или тысячи клиентов, отправляющих и получающих данные так медленно , что вы закроетеисчерпание файловых дескрипторов для всех сетевых сокетов.Клиент, который подключается со смехотворно низким MTU , может заставить ваше приложение обрабатывать мегабайты по 100-байтовым частям в течение нескольких дней или недель.

...