(узел: 6261) MaxListenersExceededWarning: обнаружена возможная утечка памяти EventEmitter

Я получаю эту ошибку в приложении nodejs: Версия узла: v8.11.1

(node:6261) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase
limit

У меня очень простой код отправки уведомления на устройство IOS с помощью node-apn. Код работает нормально, я также получаю push-уведомления на устройстве

var express               = require('express')
  , serverPort            = 6900
  , app                   = express()
  , http                  = require('http')
  , https                 = require('https')
  , fs                    = require('fs')
  , apn                   = require('apn')
;

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello!');
  res.end();
});

server.listen(serverPort, (err) => {

  if (err) { return console.info("Something bad happened", err); }
});

var apnOptions = {

  token: {
  },
  production: false 
};

var apnProvider = new apn.Provider(apnOptions);
var note        = new apn.Notification();

note.expiry     = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
note.badge      = 3;
note.sound      = "ping.aiff";
note.alert      = "\uD83D\uDCE7 \u2709 You have a new message";
note.payload    = { 'messageFrom': 'John Appleseed' };
note.topic      = "com.example.test";

apnProvider.send(note, '6A752501A5DAFF9DCSFRE56C5B0E699385CD14B586CEF4B9C5012DDA4').then( (result) => {

  console.info(result); 
});

Проблема здесь в коде APN, потому что, как только я прокомментирую код APN, я больше не сталкиваюсь с этой ошибкой. Может ли кто-нибудь понять, что не так с моим кодом? Мне кажется, я все сделал прямо здесь, но все же сталкиваюсь с этой проблемой.

Вы видели этот вопрос или этот комментарий в Github? К сожалению, скорее всего, проблема в node-apn. Пожалуйста, опубликуйте трассировку стека и версию node-apn, которую вы используете.

sampathsris 08.11.2018 11:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
6 109
2

Ответы 2

node-apn имеет несколько вопросов, попробуйте использовать node-apn-http2.

npm install node-apn-http2

Заменить , apn = require('apn')

с , apn = require('node-apn-http2')

Есть два решения. Оба связаны с обновлением максимального количества слушателей, и оба должны быть добавлены в начало вашего кода.

1- Вы можете установить 0 для прослушивателей событий, как показано ниже, что рискованно, потому что вы в основном снимаете ограничение:

const emitter = new EventEmitter()
emitter.setMaxListeners(0)

2- Глобально исправляет ошибку, установите максимальное значение как максимальное, например

require('events').EventEmitter.prototype._maxListeners = 100;

Ссылка 1: https://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListenershttps://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners

Ссылка 2: Обнаружена возможная утечка памяти EventEmitter

@StormTrooper конечно, дайте мне знать :)

Eray Balkanli 15.11.2018 20:39

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