(узел: 6261) MaxListenersExceededWarning: обнаружена возможная утечка памяти EventEmitter - PullRequest
0 голосов
/ 31 октября 2018

Я получаю эту ошибку в приложении 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.log("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.log(result); 
});

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

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

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

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 обнаружена

0 голосов
/ 11 ноября 2018

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

npm install node-apn-http2

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

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

...