Sheppard Y

keep thinking keep coding.

pomelo源码分析(3)-pomelo-sync

2016-07-11 日更新 
此篇博客已经迁移到新博客,并做行文检查和优化排版:
http://blog.clawz.me/2013/12/04/13-pomelo-read-source-3/

 


    现在分析的版本为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里的sync。rewriter.sync里将pomelo-sync.flushQueue和pomelo-sync.mergerMap里的数据通过rewrite.tick刷进持久层。rewriter.tick里是通过pomelo-sync.mapping里的映射调对应的sql语句来实现的。

posted on 2013-12-04 14:28 Sheppard Y 阅读(2522) 评论(0)  编辑 收藏 引用 所属分类: 开源nodejs


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

留言簿(1)

随笔分类(77)

随笔档案(58)

me

基友

同行

业界前辈

最新随笔

搜索

积分与排名

最新评论

阅读排行榜