Предупреждение: происходит узел apn emitter.setMaxListeners()

Я отправляю push-уведомления, используя node apn.

возникает проблема с emitter.setMaxListeners() при отправке push 10 000 пользователям.

но не возникает проблема с отправкой push на 1000 пользователей.

как решить эту проблему.

предупреждение :

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

код

const server = new Hapi.Server();
server.connection({port: 3000});
...
server.register([{
...
}], (err) => {
    if (err) {
        throw err;
    }

    server.start((err) => {
        if (err) {
            throw err;
        }
        console.log(`Server running at : ${server.info.uri}`);
    });
});

server.route({
    method: 'POST',
    path: '/push',
    handler: function(request, reply) {
        ...
        var notification = new apn.Notification() ;
        notification.badge = count ;
        notification.sound = "default" ;
        notification.alert = message ;
        notification.topic = toping ;
        ...
        //here tokens 10,000 counts
        apn_sender.send(notification, tokens).then((result) => {

            var res = {
                success : result.sent.length,
                failed : result.failed.length
            } ;

            return reply(res) ;

        }) ;
        ...
    }
});

person ATHeart    schedule 11.05.2017    source источник


Ответы (2)


Попробуйте установить setMaxListeners как,

process.setMaxListeners(0);

EventEmitters имеет тенденцию выводить предупреждение (по умолчанию), когда для определенного события добавляется более 10 слушателей. Это позволяет нам помочь в поиске утечек памяти. Однако не все события должны быть ограничены только 10 слушателями. Метод emitter.setMaxListeners() позволяет изменить ограничение для этого конкретного экземпляра EventEmitter. Значение может быть установлено на бесконечность (или 0), чтобы указать неограниченное количество слушателей.

Надеюсь это поможет!.

person David R    schedule 11.05.2017
comment
Не могли бы вы обновить свой пост полным кодом, где у вас есть объявление emitter (например, const emitter = new EventEmitter())? - person David R; 11.05.2017
comment
Я не объявлял «эмиттер». Итак, если я объявлю «эмиттер» в обработчике и использую emitter.setMaxListeners()? - person ATHeart; 11.05.2017
comment
Ага.. Пожалуйста, добавьте const emitter = new EventEmitter();emitter.setMaxListeners(0); в свой код. - person David R; 11.05.2017
comment
Ты уверен? emitter.setMaxListeners(0) добавит бесконечных слушателей - person Mansuu....; 17.08.2018

Вы отключили соединение с провайдером APN, используя следующее:

apnProvider.shutdown();

После отправки уведомление было завершено.

person Alish Giri    schedule 13.10.2020