警告:发生节点 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()的主要内容,如果未能解决你的问题,请参考以下文章
警告:可能的 EventEmitter - 运行“foundation new”时的节点警告