我开发了一个 chrome 扩展,它使用 IndexedDB 在本地保存数据。我想添加一个功能来在多台计算机之间同步数据。你能给我建议一个解决方案吗?谢谢
编辑:我不维护任何服务器,也不收集任何用户的私有(private)信息。该扩展基本上是来自免费第三方的数据的混搭。因此,如果我的用户对计算机 A 中的数据进行任何更改,它也应该反射(reflect)在计算机 B 或设备 C 中(用于将来的待办事项支持:)
最佳答案
更新:根据您的编辑,我相信 Deni Mf 先生的链接是实现点对点工作的一个很好的指南。但我相信该技术尚未可用于一般用途,并且您可能最好与服务器同步,甚至可能是允许您执行此操作的第三方(Amazon S3 和/或类似服务)。 Chrome 已经内置了一些同步服务 - How to synchronize Chrome extension data on different computers? - 但您只能将其用于少量数据,因此实际上这些只能是指向其他地方托管的真实数据的指针。
原始答案如下:
您需要弄清楚几个方面。首先,当您说“多台计算机”时,这是否意味着多台计算机与同一组服务器通信,或者您实际上是指对等意义上的多台计算机(每台计算机既是客户端又是服务器) .
其次,你需要一个同步机制和协议(protocol)。如果一切都很好,每个人都受到信任,没有真正的 secret 并且正在运行,那么您至少会面临一些挑战;在某种私有(private)网络上,您很可能使用 CouchDB 或类似的东西,它开箱即用(但一旦您尝试向数据添加身份验证和授权就变得具有挑战性)。如果没有,您需要自己推出。
假设您有客户端与一组特定的服务器(使用 HTTP 或类似的)进行通信,并且假设您不能使用 CouchDB 或类似的服务器(出于上一段所述的原因),那么自行部署并不太难。由于数据库行(或类似的行)可以在任何客户端或服务器上创建,因此使用传统的串行整数主键很可能不值得,并且您需要使用 UUID 或类似的唯一键(因此每台计算机都可以创建自己的主键) - 假定唯一 - 任何对象的键)。为包含“更新”时间戳(创建或更新对象时)的每一行至少添加一列,并添加另一个包含上次同步时间戳的数据库。每当客户端连接时,请向服务器询问自上次连接以来的任何更新,并向服务器发送自上次连接以来您在本地创建的任何更新。删除行之类的事情有点棘手,因为删除的行没有“更新”时间戳,因此请考虑向每行添加一个简单的“删除”标志以使事情变得更简单。
这至少应该足以让你继续前进。
关于javascript - Chrome扩展中IndexedDB的同步解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867204/