Я получаю эту ошибку в приложении 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, я больше не сталкиваюсь с этой ошибкой. Может ли кто-нибудь понять, что не так с моим кодом? Мне кажется, я все сделал прямо здесь, но все же сталкиваюсь с этой проблемой.





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;
Ссылка 2: Обнаружена возможная утечка памяти EventEmitter
@StormTrooper конечно, дайте мне знать :)
Вы видели этот вопрос или этот комментарий в Github? К сожалению, скорее всего, проблема в
node-apn. Пожалуйста, опубликуйте трассировку стека и версиюnode-apn, которую вы используете.