1

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

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

4

2 回答 2

2

这是一个很好的答案,它解释了如何建立浏览器到浏览器(点对点)的连接。

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

于 2012-08-08T17:28:25.660 回答
2

更新:根据您的编辑,我相信 Deni Mf 先生的链接是让点对点工作的一个很好的指针。但我相信该技术还不能用于一般用途,你可能会更好地与服务器同步,甚至可能是第三方允许你这样做(Amazon S3 和/或类似服务)。Chrome 已经内置了一些同步服务 -如何在不同的计算机上同步 Chrome 扩展数据?- 但是您只能将其用于少量数据,因此实际上这些只能是指向其他地方托管的真实数据的指针。

原答案如下:

有几个方面你需要弄清楚。首先,当您说“多台计算机”时,这是否意味着多台计算机与同一组服务器通信,或者您实际上是指点对点意义上的多台计算机(每台计算机既是客户端又是服务器) .

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

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

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

于 2012-08-08T18:15:40.580 回答