2

我使用节点 apn 发送推送通知。

发生emitter.setMaxListeners() 关于向10,000 个用户发送推送的问题。

但不会出现关于向 1,000 个用户发送推送的问题。

如何解决这个问题。

警告信息 :

(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) ;

        }) ;
        ...
    }
});
4

2 回答 2

0

尝试设置setMaxListeners为,

process.setMaxListeners(0);

当为特定事件添加超过 10 个侦听器时,EventEmitters 倾向于打印警告(默认情况下)。这使我们能够帮助发现内存泄漏。但是,并非所有事件都应仅限于 10 个侦听器。该emitter.setMaxListeners()方法允许为这个特定的 EventEmitter 实例修改限制。该值可以设置为 Infinity(或 0)以指示无限数量的侦听器。

希望这可以帮助!。

于 2017-05-11T05:58:54.957 回答
0

您是否使用以下方法关闭了与 APNs 提供商的连接,

apnProvider.shutdown();

发送通知完成后。

于 2020-10-13T09:53:29.377 回答