警告:发生节点 apnemitter.setMaxListeners()

Posted

技术标签:

【中文标题】警告:发生节点 apnemitter.setMaxListeners()【英文标题】:Warning : occur node apn emitter.setMaxListeners() 【发布时间】:2017-05-11 05:32:54 【问题描述】:

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

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

但在 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) ;

        ) ;
        ...
    
);

【问题讨论】:

【参考方案1】:

尝试将setMaxListeners设置为,

process.setMaxListeners(0);

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

希望这会有所帮助!

【讨论】:

能否请您更新您的帖子,并在您拥有emitter 声明的位置(如const emitter = new EventEmitter())更新您的完整代码? 我没有声明“发射器”。所以如果我在处理程序中声明“发射器”并使用emitter.setMaxListeners()? 是的。请在您的代码中添加const emitter = new EventEmitter();emitter.setMaxListeners(0); 你确定吗? emitter.setMaxListeners(0) 将添加无限监听器【参考方案2】:

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

apnProvider.shutdown();

发送通知完成后。

【讨论】:

以上是关于警告:发生节点 apnemitter.setMaxListeners()的主要内容,如果未能解决你的问题,请参考以下文章

如何显示刚刚发生的 MySQL 警告?

警告:可能的 EventEmitter - 运行“foundation new”时的节点警告

收到内存警告时 UICollectionView 维护的单元队列会发生啥?

hbase启动时候发生警告

(节点:71307)[DEP0079] 弃用警告

Symfony 控制台:发生错误/异常/警告时如何显示行号