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