桌面应用程序之间的数据共享和通信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桌面应用程序之间的数据共享和通信相关的知识,希望对你有一定的参考价值。

我需要支持桌面应用程序之间的数据共享。我有三个桌面应用程序A,B和C.这三个应用程序计划在产品生命周期中一起使用。工作流程如下。

    1. A user creates a design (say for example an image) using application A
    2. User opens application B and should be able to work on the design (created in A) in order to add some effects on the created image.
    3. Similarly, the user should be able to continue working on the image in application C.

为此,我可以使用数据库或文件系统来存储所有级别的进程状态。但问题是,如果用户并行打开应用程序A和B中的图像并在A中进行一些更改,则应该反映在B中(如果C打开,也在C中)。

在这个问题的应用程序之间是否有任何其他设计或技术而不是文件系统/数据库共享?

任何建议都是受欢迎的。

先谢谢你,凯瑟

答案

当然有,你认为Google Docs是如何实现的?多个用户可以改变同一个文档,但所有更改都是实时的。

关键的想法是累积增量(即变更集)而不是直接更改源文件。它意味着存在另一个 - 无窗口 - 进程,负责1)无休止地从所有活动源读取新的增量,2)将它们合并为单个结果变更集,最终3)更新共享文件。

操作系统会通知ABC。这很容易。 Orchestrator(无窗口进程)可以通过不同方式通知,其中包括stdin或在localhost上侦听某个端口。由你决定。

如果你仔细设计你的增量,你可能会得到一个具有所有优点的map/reduce-able结构。

另一答案

如前面的答案所述,它是可能的。

你可以使用像Conflict-free replicated data typeOperational Transformations这样的算法来做到这一点。您可以搜索有关该主题的更多信息。关于这个主题有很多白皮书和文章。

使用上一个答案中提到的增量也是你可以做的另一件事。 Google文档使用(至少我最后一次检查)操作转换。

检查一下。这是OT的一个很好的可视化:https://operational-transformation.github.io/visualization.html

您可以使用IPC使应用程序彼此交谈或使用第三个如上所述。

以上是关于桌面应用程序之间的数据共享和通信的主要内容,如果未能解决你的问题,请参考以下文章

桌面应用程序和 Windows 服务之间通信的最佳方式

在tablayout片段之间进行通信[重复]

在片段和活动之间进行通信 - 最佳实践

片段创建的 Intent 不会触发 onNewIntent

web 应用程序之间如何通信,共享和传输数据

使用新的架构组件 ViewModel 在片段之间共享数据