通过进程使用 NodeJS 全局事件是个好主意吗?
Is it a good idea to use NodeJS global events via process?
我需要使用 setInterval
每 N 秒对数据库进行一次查询,并将结果触发到所有 Socket.IO
个客户端,所以我这样做:
let interval_id = null
io.on('connection', function(socket) {
if (interval_id == null) {
interval_id = setInterval(function() {
db.table.items.getAll().then(function(items) {
process.emit('items_found', items)
}).catch(function(err) {
log.error(err)
})
}, config.scan.interval)
}
process.on('alarms_found', function(alarms) {
console.log(alarms.length)
})
})
它工作正常,但我是NodeJS
的新手,我不知道任何其他方法可以做到这一点......总的来说,我知道使用全局范围不是最好的主意,但我不知道其他人......
- 如果你的真实代码在数量和复杂性方面是相同的,或者相似,这种方法不会造成任何问题。进程对象是一个事件发射器,在这里您可以有效地利用它。
- 如果没有,最好使用自己的事件发射器,而不是进程对象。根据设计,它表示正在运行的节点进程的重要参数,例如执行环境、节点模块和其他操作系统抽象。事件发射器继承有助于它管理进程生命周期事件。
- 用自定义应用程序数据流将其混杂不会导致任何功能问题,但是当应用程序增长时,维护和问题确定变得困难。例如,如果您还碰巧在每个时间间隔存储"警报"(全部或其中的一部分),则存储对象将无限增长,并且永远不会被垃圾收集。ii) 即使在您完成与数据库相关的活动后,侦听器将继续处于活动状态,以及它保留的任何内存。在这种情况下,您实际上可以通过命名回调函数(例如 foo)来解决此问题,并在不需要时通过发出 process.removeListener('alarms_found', foo) 来删除回调。
相关文章:
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 使用每500ms运行一次的jquery函数是个好主意吗
- 在debounce函数中使用requestAnimationFrame是个好主意吗
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- 将我所有的.js分组到一个文件中-好主意
- 与AMD共享库是个好主意吗
- 模块是打字的好主意吗?或者它们只是增加了复杂性
- 在Coffeescription中使用一个自调用函数来隐藏其余代码中的函数和变量,这是一个好主意吗
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- Meteor:为集合服务器端创建筛选器,并将其存储在本地集合中.好主意
- 修改 yii.activeForm 是个好主意吗.js如果不是,另一种方法是什么
- Javascript中的异步类是一个好主意吗?
- 将 with-语句与上下文一起使用是个好主意吗?
- 在 JavaScript 中将小数字合并为一个是个好主意吗?(作为存储优化解决方案)
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 我可以定义一个函数来处理在 2 个输入标签上定义的“更改键控”事件吗?这是个好主意吗
- 使用经典继承,在 JavaScript 中使用“类级”/成员变量是一个好主意还是坏主意
- Cron Job是执行此任务的好主意吗?PHP
- 在JS模板中添加逻辑?好主意还是不行
- 模型直接$watched和调用的视图与角度-一个好主意