我需要支持桌面应用程序之间的数据共享。我有三个桌面应用程序A,B和C.这三个应用程序计划在产品生命周期中一起使用。工作流程如下。
为此,我可以使用数据库或文件系统来存储所有级别的进程状态。但问题是,如果用户并行打开应用程序A和B中的图像并在A中进行一些更改,则应该反映在B中(如果C打开,也在C中)。
在这个问题的应用程序之间是否有任何其他设计或技术而不是文件系统/数据库共享?
任何建议都是受欢迎的。
先谢谢你,凯瑟
当然有,你认为Google Docs是如何实现的?多个用户可以改变同一个文档,但所有更改都是实时的。
关键的想法是累积增量(即变更集)而不是直接更改源文件。它意味着存在另一个 - 无窗口 - 进程,负责1)无休止地从所有活动源读取新的增量,2)将它们合并为单个结果变更集,最终3)更新共享文件。
操作系统会通知A
,B
和C
。这很容易。 Orchestrator
(无窗口进程)可以通过不同方式通知,其中包括stdin
或在localhost
上侦听某个端口。由你决定。
如果你仔细设计你的增量,你可能会得到一个具有所有优点的map/reduce
-able结构。
如前面的答案所述,它是可能的。
你可以使用像Conflict-free replicated data type和Operational Transformations这样的算法来做到这一点。您可以搜索有关该主题的更多信息。关于这个主题有很多白皮书和文章。
使用上一个答案中提到的增量也是你可以做的另一件事。 Google文档使用(至少我最后一次检查)操作转换。
检查一下。这是OT的一个很好的可视化:https://operational-transformation.github.io/visualization.html
您可以使用IPC使应用程序彼此交谈或使用第三个如上所述。