在chrome扩展中同步IndexedDB的解决方案

时间:2012-08-08 14:51:13

标签: javascript google-chrome-extension indexeddb

我开发了一个chrome扩展,它使用IndexedDB在本地保存数据。我想添加一个功能来在多台计算机之间同步数据。你能给我一个解决方案吗?感谢

编辑:我不维护任何服务器,也不收集任何用户私人信息。扩展基本上是来自免费第三方的数据混搭。因此,如果我的用户对计算机A中的数据进行任何更改,它也应该反映在计算机B或设备C中(以备将来支持:)

2 个答案:

答案 0 :(得分:2)

这是一个good answer,它解释了如何使浏览器与浏览器(点对点)连接。

其他解决方案是制作某种服务器端应用程序,允许用户在您的服务器或某些第三方存储上存储数据,然后将数据检索到其他计算机。

答案 1 :(得分:2)

更新:根据您的编辑,我相信Deni Mf先生的链接是指向同行工作的一个很好的指针。但我相信技术尚未用于一般用途,并且您可能最好不要同步服务器,甚至可能允许您执行此操作的第三方(Amazon S3和/或类似服务)。 Chrome已经内置了一些同步服务 - How to synchronize Chrome extension data on different computers? - 但您只能将其用于少量数据,因此实际上这些只能指向其他地方托管的实际数据。

以下原始答案:

您需要了解一些方面。首先,当你说“多台计算机”时,这是否意味着多台计算机与同一组服务器通信,或者你实际上是指具有对等意义的多台计算机(每台计算机都是客户端和服务器)

其次,您需要一个同步机制和协议。如果一切都很好,每个人都信任没有真正的秘密和运行你至少有几个挑战;在某种类型的专用网络上,您可以很好地使用CouchDB或类似的东西,这些东西开箱即用(但是一旦您尝试向数据添加身份验证和授权,就会变得具有挑战性)。如果没有,你需要自己动手。

假设您有客户端与特定服务器集合(使用HTTP或类似服务器),并假设您不能使用CouchDB或类似服务器(出于前一段中所述的原因),那么滚动您自己的服务器并不太难。由于可以在任何客户端或服务器上创建数据库行(或类似的),使用传统的串行整数主键很可能不值得,并且您需要使用UUID或类似的唯一键(因此每台机器都可以创建它自己的 - 假设唯一 - 任何对象的键)。为每行添加至少一列,其中包含“已更新”时间戳(创建或更新对象时)并添加包含上次同步时间戳的另一个数据库。每当客户端连接时,请询问服务器自上次连接以来是否有任何更新,并向服务器发送自上次连接以来您在本地创建的任何更新。删除行的事情有点棘手,因为删除的行没有“更新”的时间戳,所以考虑只为每行添加一个简单的“已删除”标志以使事情变得更简单。

这至少应该足以让你前进。