GameServerManager/docs/文件监视功能说明.md
2025-10-15 21:19:45 +08:00

4.4 KiB
Raw Permalink Blame History

文件监视功能说明

功能概述

文本编辑器现在支持自动监测打开文件的外部修改。当文件在其他地方(如其他编辑器、命令行等)被修改时,系统会自动检测并处理这些变化。

功能特性

1. 自动监视

  • 当您在编辑器中打开文件时,系统会自动开始监视该文件
  • 不需要手动开启或配置,完全自动化

2. 智能处理

场景一:文件未被修改

  • 如果您打开的文件没有任何未保存的修改
  • 系统会自动重新加载文件内容
  • 编辑器会无缝更新到最新版本

场景二:文件有未保存修改

  • 如果您对文件有未保存的修改
  • 系统会弹出确认对话框
  • 您可以选择:
    • 重新加载文件:放弃当前修改,加载磁盘上的最新内容
    • 保留我的修改:保留您当前的修改,忽略外部变化

3. 实时监测

  • 使用 WebSocket 实现实时文件监视
  • 基于文件系统的原生监视机制(fs.watch
  • 低延迟,高效率

技术实现

后端架构

文件监视管理器 (server/src/modules/file/FileWatchManager.ts)

  • 管理所有被监视的文件
  • 使用 Node.js 的 fs.watch API
  • 跟踪文件修改时间,避免重复通知
  • 支持多客户端同时监视同一文件

WebSocket 事件处理 (server/src/index.ts)

  • watch-file: 开始监视文件
  • unwatch-file: 停止监视文件
  • file-changed: 通知客户端文件已变化

前端架构

文件存储 (client/src/stores/fileStore.ts)

  • 管理被监视文件列表
  • 处理文件变化事件
  • 智能判断是否需要弹出确认对话框

UI 组件 (client/src/components/FileChangedDialog.tsx)

  • 美观的确认对话框
  • 清晰的警告提示
  • 友好的操作按钮

页面集成 (client/src/pages/FileManagerPage.tsx)

  • 自动监视/取消监视文件
  • 响应文件变化事件
  • 显示用户通知

使用流程

  1. 打开文件

    用户双击文件 → 文件在编辑器中打开 → 系统自动开始监视
    
  2. 外部修改文件

    其他程序修改文件 → 系统检测到变化 → 触发处理逻辑
    
  3. 自动处理

    检查是否有修改 → 无修改:自动重载 | 有修改:弹出对话框
    
  4. 关闭文件

    用户关闭文件 → 系统自动停止监视该文件
    

注意事项

性能考虑

  • 监视器使用 { persistent: false } 选项,不会阻止进程退出
  • 支持多客户端共享监视,节省资源
  • 自动清理断开连接客户端的监视

智能识别保存操作

  • 系统能够区分"面板内保存"和"外部修改"
  • 当您在面板中保存文件时,不会触发"文件已修改"对话框
  • 使用 ignoreNextChange 标志机制,在保存操作前设置忽略标志
  • 保存完成后自动清除标志,恢复正常监视

安全性

  • 只监视已打开的文件
  • 路径验证确保安全性
  • 客户端断开时自动清理

兼容性

  • 支持 Windows、Linux、macOS
  • 支持网络文件系统(可能有延迟)
  • 支持各种编码格式

故障排除

文件变化未被检测

可能原因:

  • 某些编辑器使用"安全保存"模式(先删除再创建新文件)
  • 网络文件系统延迟
  • 文件被锁定

解决方法:

  • 手动刷新编辑器
  • 尝试重新打开文件

保存时误报"文件已修改" (已修复)

问题描述:

  • 在面板中保存文件时,总是弹出"文件已在外部修改"对话框

修复方案:

  • 已实现智能识别机制
  • 保存操作会自动设置忽略标志
  • 只有真正的外部修改才会触发对话框

频繁弹出对话框

可能原因:

  • 自动保存工具频繁修改文件
  • 文件被多个程序同时编辑

解决方法:

  • 关闭自动保存工具
  • 确保只有一个程序在编辑文件

未来改进

  • 支持配置是否启用文件监视
  • 支持配置监视延迟时间
  • 支持显示文件变化差异对比
  • 支持合并外部修改和本地修改

相关文件

后端

  • server/src/modules/file/FileWatchManager.ts - 文件监视管理器
  • server/src/index.ts - WebSocket 事件处理

前端

  • client/src/stores/fileStore.ts - 文件状态管理
  • client/src/components/FileChangedDialog.tsx - 确认对话框组件
  • client/src/pages/FileManagerPage.tsx - 文件管理页面集成
  • client/src/utils/socket.ts - WebSocket 客户端