node-apn技术疑问:Provider应按请求创建还是仅创建一次?
关于node-apn中Provider实例的使用建议
嘿,作为node-apn的新手,这个问题问得很关键!答案是:你只需要创建一个Provider实例,然后在整个应用里重复使用它就好,绝对不要每次发通知都新建一个。
为什么要复用Provider实例?
因为Provider内部已经帮你管理了一个与APNs服务器的连接池,它会维持持久的连接。如果每次发通知都新建Provider,就会频繁地建立和销毁连接:
- 浪费系统资源,增加不必要的开销
- 提升推送请求的延迟
- 甚至可能触发APNs的限流机制,影响推送的可靠性
优化你的代码示例
看你现在的代码,其实已经走在正确的路上了——把apnProvider的创建放在模块顶部,而不是send函数内部。这里给你调整一下,确保复用这个实例:
var APN = require('apn') // 全局只创建一次Provider实例 var apnProvider = new APN.Provider({ token: { key: "PATH_TO_FILE", keyId: "KEY", teamId: "TEAM" }, production: false }); module.exports = { send: function (tokens, message, callBackFn) { var note = new APN.Notification({ // 可以用传入的message替换默认文本 alert: message || "Breaking News: I just sent my first Push Notification", }); // 主题通常是你的应用Bundle ID note.topic = "BUNDLE"; // 复用已创建的apnProvider发送通知 apnProvider.send(note, tokens) .then((result) => { // 处理推送结果,调用回调函数 callBackFn(null, result); }) .catch((err) => { // 捕获错误并传递给回调 callBackFn(err); }); } }
总结
Provider是node-apn专门设计用来复用的组件,全局单例初始化一次,所有推送请求都复用这个实例,这也是官方推荐的最佳实践哦。
内容的提问来源于stack exchange,提问作者Ankur
相关产品推荐
相关产品推荐

