这个要求看起来非常普遍(或者说将来对于移动Web应用程序来说会很普遍),但我找不到可以实现它的库。
我知道谷歌正在他们的移动Web应用程序中执行此操作(例如gmail),并且我找到了WSPL项目,这是一个谷歌项目,但没有源代码可供下载。
如果我找不到解决方案,我将创建一个库来实现它,因为单向同步看起来并不难,但我想知道是否有其他解决方案。
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
要使用此库,您需要使用框架的DataAccessObject来访问您的数据库。它通过存储应用于数据库的所有SQL请求(除了选择操作),并将它们发送到服务器来工作。它非常适合管理删除,但如果您有很多更新,则有点繁重,而且服务器需要使用相同的SQL语言...
http://www.quickconnectfamily.org/qcdbsync/ (我认为它还存储了所有SQL请求的历史记录)
https://github.com/zefhemel/persistencejs
"persistence.js是一个异步JavaScript对象关系映射库。您可以在浏览器中使用它,也可以在服务器上使用它(并且可以在它们之间共享数据模型)."
他们有一个DB同步模块:persistence.synch.js的DOC
(在客户端使用HTML5 DB SQLite或Google Gears,在服务器上使用MySQL)
http://impel.simulacre.org/api/Impel.inTouch
自动将本地 WebSql 数据库(浏览器中的 SQLite)与服务器同步。(2向同步:客户端<->服务器)
非常容易集成到您现有的应用程序中,并且非常易于使用(只需调用2个函数:initSync和syncNow)
您需要初始化库(例如每次启动时)。
它将自动创建2个表(如果它们不存在),一个用于存储所有新元素或修改的元素(表 new_elem),另一个用于存储上次同步日期(表 sync_info)。它还将创建SQLite触发器,以监视您想要同步的表上的INSERT或UPDATE操作(以自动将修改后的元素插入new_elem表中):
DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);
表 TABLES_TO_SYNC 是您要与服务器同步的表列表,例如:
TABLES_TO_SYNC = [
{tableName : 'table1', idName : 'the_id'},
{tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];
要开始同步,您需要调用syncNow函数。你可以每隔X秒调用它或在某些更改后调用它,例如:
DBSYNC.syncNow(callBackSyncProgress, function(result) {
if (result.syncOK === true) {
//Synchronized successfully
}
});
在客户端,你只需要做这些。在服务器端,你需要编写自己的解决方案(但它并不复杂)。PHP和Java中都有一些示例。欢迎贡献。