跳到主要内容

FileSyncMonitor

FileSyncMonitor(简称 FS)用于从远端同步一些文件到本地,以供 go-aliyunmc 读取、处理和向前端返回这些数据。常见的一些需要同步的文件包括:

  • whitelist.json:包含服务器的白名单玩家,用于结合游戏名绑定关系来确定一个玩家在 go-aliyunmc 上的账号的权限
  • Sqlite 数据库文件:用于被 go-aliyunmc 读取并返回到前端进行展示,例如记录玩家游戏时间的插件所产生的 db 文件
  • server.properties:用于读取并返回到前端进行展示
  • et cetera

FS 是为小文件设计的,对于大文件或者潜在大文件(即大小不稳定,可能将来变得很大的文件),虽然也可以同步,但需要注意 FS 目前没有任何对于大文件的优化机制,如分片与断点续传等。

配置

  • local_cache_root:相对于 go-aliyunmc 运行目录的用于存放同步来的文件的路径,例如 ./remote_data_cache
  • files:一个数组,包含了所有需要同步的文件的描述信息
    • remote_path:远端服务器上的文件地址,必须是绝对路径
    • local_path:相对于 local_cache_root 的文件地址,一般直接填本地文件名即可
    • poll_interval_sec:同步时间间隔,单位为秒。该时间应当大于两个服务器之间的文件传输时间,该时间与文件的大小有关。该时间将成为与被同步文件关联的数据的“更新延迟”的最小值,例如,若将白名单的同步间隔设置为 60 秒,那么 go-aliyunmc 所看到的白名单数据相比真实数据的延迟至少有一分钟的延迟。

流程

初始化

FS 初始化阶段,会确保 local_cache_root 的存在,如果不存在则创建。

然后,对于 files 中的每一项都单独起一个协程,也就是每一个文件的同步操作将在单独的协程中完成,也会有单独的日志。

文件同步流程

每隔 poll_interval_sec 进行一次同步,具体来说,是执行一遍下面的流程

文件下载

文件下载通过 SFTP,使用远程服务器的 root 账户进行。SFTP 使用 https://github.com/pkg/sftp 的实现。