node-monitor 全解:FileProbe 监听文件变化与 SyncProbe 数据模型双向同步
【免费下载链接】node-monitorNode.js application monitoring项目地址: https://gitcode.com/gh_mirrors/no/node-monitor
node-monitor 是一款轻量级的 Node.js 应用监控库,其中FileProbe 文件监听与SyncProbe 数据模型同步是它最有特色的两大文件能力:前者让你实时追踪服务器上的文件变化,后者让客户端数据模型与服务端存储自动双向同步。本文带你快速理解这两个 Probe 的用法与最佳实践。
为什么需要 Node.js 文件监听能力?
运行中的服务经常要回答这些问题:
- 模板或配置文件改了,应用什么时候能感知?
- 客户端改了一条数据,服务器怎么落盘?
- 服务器上的数据变了,浏览器端怎么自动更新?
node-monitor 的思路很简单:Probe(探针)负责服务端能力,Monitor(监视器)负责客户端连接。连接建立在 42000 起始端口(见 config/default.js),数据基于 Backbone 模型实时推送,监听文件变化只需几行配置。
FileProbe:实时监听文件变化的完整用法
源码位置:
lib/probes/FileProbe.js
FileProbe 监控指定文件,把最新内容放进text字段,文件一变就触发change事件。它还有两个贴心设计:
| 设计 | 说明 |
|---|---|
| 🔒 默认禁用 | 必须服务端先调用setRootPath()才能启用,防止远程读取任意文件 |
| 🚧 路径围栏 | 只允许访问根路径之下的文件,../这类越权路径会被直接拒绝 |
三步上手:
- 服务端启用:在应用启动时执行
Monitor.FileProbe.setRootPath('/home/public'),把可访问范围锁死在某个目录 - 客户端连接:创建一个
probeClass: 'File'、initParams.path指向相对路径的 Monitor - 监听变化:连接成功后
text字段即为文件内容,监听change事件即可感知每次修改
除了监控,FileProbe 还内置了一批服务器端文件工具方法:watchLoad(变化时自动重载内容)、mkdir_r(递归建目录)、rm_rf(递归删除),写自定义 Probe 时可直接复用。测试用例可参考test/FileProbeTest.js。
⚠️ 注意:
tail(只跟踪新增内容)功能目前标记为 UNDER_CONSTRUCTION,建议以整文件读取方式使用。
SyncProbe:数据模型与服务端存储双向同步
源码位置:
lib/probes/SyncProbe.js、lib/probes/FileSyncProbe.js、lib/Sync.js
如果说 FileProbe 是"看文件",SyncProbe 就是"管数据"。它让任何 Backbone 模型获得完整的fetch / save / destroy能力,并且变化是双向流动的:
- 客户端 → 服务端:本地模型一
change,自动持久化到存储 - 服务端 → 客户端:存储内容一变(比如运维直接改了 JSON 文件),本地模型自动刷新
两种典型模式
1. 普通 CRUD 同步
把Monitor.Sync('Book')赋给模型的sync字段后,直接调用fetch()/save()/destroy()即可。服务端通过SyncProbe.Config决定数据落到哪里:
Monitor.SyncProbe.Config.defaultProbe = 'FileSyncProbe'; Monitor.SyncProbe.Config.classMap = { Book: 'MongoDbSync' };不同类可以路由到不同的存储实现,扩展性很强。
2. LiveSync 实时双向同步
fetch({liveSync: true})会为该数据实例建立专属连接:服务端文件变化实时推送到模型,本地修改实时写回存储;文件被删除时模型自动清空。用完记得调用model.clear()释放资源。
FileSyncProbe:把模型存成 JSON 文件
FileSyncProbe 是最直观的落地方式——每个模型 ID 对应一个.json文件,目录结构由"类名目录 + ID 文件"组成:
create:ID 冲突时拒绝,避免覆盖read:文件不存在返回NOTFOUND,格式错误返回PARSEupdate:自动建目录后写入,同时更新 liveSync 模型delete:删除文件并通知客户端清空模型
它复用了 FileProbe 的watchLoad实现监听,所以文件在磁盘上被外部修改时,liveSync 客户端同样能立刻收到更新。
快速上手:5 分钟跑通文件同步
- 安装:
npm install monitor(也可通过 git clone 获取源码后本地安装) - 服务端启动一行接入:
require('monitor').start() - 启用文件能力:
setRootPath()指定根目录(FileProbe 与 FileSyncProbe 各设一次) - 配置
SyncProbe.Config.defaultProbe = 'FileSyncProbe' - 客户端用
Monitor.Sync('YourClass')挂到模型上,开始fetch/save
完整流程可对照test/SyncProbeTest.js中的 Coerce、BaseSync 测试组,它演示了从类转换、CRUD 到 liveSync 的完整链路。
安全清单:启用文件能力前必做 3 件事
- ✅必须设置根路径:未设置
setRootPath()时,FileProbe 与 FileSyncProbe 都会直接抛错拒绝工作 - ✅根路径只设一次:再次设置不同路径会报错,这是防止运行中放开访问范围
- ✅谨慎开放外网:默认仅允许本机连接(
allowExternalConnections: false),跨机监控前请先阅读config/external.js的安全说明
小结
node-monitor 用一套"Probe + Monitor"的架构,把文件世界和数据世界打通:
- FileProbe——文件变化的眼睛:监听、重载、路径安全围栏
- SyncProbe / FileSyncProbe——数据同步的管道:CRUD 持久化 + liveSync 双向实时同步
两个 Probe 默认都处于"未启用"状态,先想清楚安全边界,再setRootPath一键激活,是既稳妥又高效的用法。
【免费下载链接】node-monitorNode.js application monitoring项目地址: https://gitcode.com/gh_mirrors/no/node-monitor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考