我们需要在后端服务器、Web 客户端、 native iOS 应用程序和 native Android 应用程序之间共享通用数据结构。后端服务器是用 NodeJS 编写的,底层使用 Postgres 数据库。
我考虑过 Firebase 实时数据库,因为它可以解决后端可以写入 Firebase 数据库并且所有客户端都可以使用该数据库的所有需求。
我的问题是,是否有一个开源替代方案可以开箱即用,并且比成熟的 Firebase 实时数据库更能满足我们的要求,后者将提供许多我们不需要或不想要的功能。
--- 以下是假设和要求 ----
后端作为主机,因此数据结构的更改只能由后端执行。
数据结构可以假设为一个简单的键值对列表、一个简单的对象数组或一个完整的树结构(如 json 对象)。我们可以使用所有解决方案。
数据结构的大小非常有限,例如小于 100KB。
对服务器上数据结构的任何更新都应该近乎实时地传播到所有订阅该数据结构的客户端。
如果客户端离线一段时间,则应在连接后立即更新。
每种类型的客户端都必须有一种强大的方式来订阅数据结构中的更改。因此,一旦数据结构的本地版本被更新,同时应该通知它发生了什么变化。
如果可能,客户端在收到有关数据结构更新的通知时,应该知道“数据结构的一部分”已更新。
我们希望编写尽可能少的代码,并且更喜欢具有 NodeJS 服务器库和 Web、 native iOS 和 native Android 客户端库的解决方案。
native 应用程序无法请求推送通知的权限。
它必须在任何支持 websockets 或类似的现代浏览器上运行。
最佳答案
有趣的问题。我不知道有哪个开源系统可以做到这一点,我相信 Firebase 本身就是从这样一个称为 Parse 的系统演变而来的。现在,我可以告诉您的是 Firebase 是一个可靠的选择,也许您不应该这么快放弃它:
Firestore 是新的数据库系统。实时数据库将被逐步淘汰。而firestore在功能上更胜一筹。
Firebase 可以免费启动,达到非常高的级别后,价格就相当实惠。
它已被管理。我怎么强调这一点的重要性都不为过。保护或维护系统不是您的问题,就像您推出自己的解决方案一样。
它会自动扩展,这意味着,规划容量、购买、滚动或同步额外服务器、维护内存或磁盘都不是您的问题。这一切都是为你照顾的。
“您可能不需要的功能”可以节省大量时间和成本,例如与不同提供商的托管身份验证、移动推送通知、分析、文件存储等。
它具有网络和移动客户端,因此您可以开发所需的客户端并共享相同的后端。
也就是说,我可以问一下你为什么问这个吗?我非常熟悉 Firebase,也许可以帮助您进行部署。
干杯
关于node.js - 如何跨 Web 和 native 应用程序实现数据结构到多个客户端的单向同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401342/