Нужно ли удалять домены node.js? Когда это должно быть сделано?

У меня есть приложение Express, и я использую домены для каждого полученного запроса. Я добавил промежуточное программное обеспечение, чтобы обеспечить дальнейшее выполнение промежуточного программного обеспечения "внутри" домена.

app.use(function(req, res, next) {
    var d = domain.create();

    d.req = req;

    d.add(req);
    d.add(res);

    d.run(next);
});

Кроме того, некоторый код, который выполняется во время обработки запроса, использует process.domain.req чтобы получить ссылку на первоначальный запрос, его заголовки, файлы cookie и т. д. Я делаю это потому, что не могу передать req прямо к этому коду. Этот странный код является своего рода межсредовым кодом (для браузера и для узла), который не знает, где он выполняется. Под капотом некоторые базовые слои реализованы по-разному для Node и для браузера, особенно для сетевого кода. Для браузера это XMLHttpRequest, а для NodeJS - специальная оболочка, основанная на request Lib.

Я беспокоюсь о утечках памяти. Что ссылки на req хранится на домене. Могут ли они хранить эти вещи и не собирать их?

Кроме того, мне нужно регулярно распоряжаться доменами, или мне нужно распоряжаться ими в некоторых случаях, когда возникают проблемы / ошибки?

1 ответ

Решение

Обычно вы располагаете свой домен в случае ошибки или завершения, вот пример https://gist.github.com/regality/3061748.

Однако, насколько я понимаю, метод domain.dispose() считается устаревшим. Подробности смотрите в этом выпуске git: https://github.com/joyent/node/issues/5018

Далее, в соответствии с документом, рекомендуется, чтобы вы убили процесс домена, если вы столкнулись с ошибкой. Эта ссылка имеет хорошее объяснение и пример.

Другие вопросы по тегам