文章目录
  1. 1. Pomelo 程序如何使用 pomelo-sync
  2. 2. pomelo-sync
    1. 2.1. pomelo-sync.exec
    2. 2.2. pomelo-sync.flush
    3. 2.3. pomelo-sync.sync

现在分析的版本为 0.7 版。pomelo-sync,Pomelo 里用于解决游戏进程中需要持久化的数据在内存与存储系统之间的同步问题。

Pomelo 程序如何使用 pomelo-sync

新版本的 Pomelo 里增强了支持用户自行扩展的能力。用户只用在 app.use(plugin, opts) 就可以了,具体请看 Pomelo 的 application.js 里的 use 函数。需要这个 plugin 里有 components 成员。use 函数里,Pomelo 将 plugin 的 componets 所指的组件 load 起来,并将 opts 传给这个 plugin 的 components。

pomelo-sync 自身只负责实现 DB 数据与内存数据间的定时同步,所以另一个项目pomelo-sync-plugin 就将 pomelo-sync 封装成了一个 componet。app.use(require('pomelo-sync-plugin', opts) 就完成了数据同步插件的装载。

pomelo-sync

pomelo-sync 在构造的时候,将参数里的 client(与持久化层的链接)、mapping(如各种操作的 SQL 语句的映射表)等赋值给自己的相应成员。最后开启定时刷内存数据到持久化层的计时器 SyncTimer。

对外接口不只在 dbsync.js 里,还分布在 lib/commands 下的几个文件里。其中 exec/flush/sync 等在 commands/server.js 里。

pomelo-sync.exec

pomelo-sync.exec 函数,被用户程序调用。将用户的数据放入 pomelo-sync.flushQueue 或者 pomelo-sync.mergerMap

pomelo-sync.flush

pomelo-sync.flush 函数,将单挑数据立即持久化。

pomelo-sync.sync

pomelo-sync.sync 函数,被 SyncTimer 调用,也可以被用户程序调用,立即将全部内存数据持久化。sync 函数里调用的是 rewriter.js 里的 syncrewriter.sync 里将 pomelo-sync.flushQueuepomelo-sync.mergerMap 里的数据通过 rewrite.tick 刷进持久层。rewriter.tick 里是通过 pomelo-sync.mapping 里的映射调对应的 SQL 语句来实现的。

文章目录
  1. 1. Pomelo 程序如何使用 pomelo-sync
  2. 2. pomelo-sync
    1. 2.1. pomelo-sync.exec
    2. 2.2. pomelo-sync.flush
    3. 2.3. pomelo-sync.sync