【问题标题】:How to share state between programs?如何在程序之间共享状态?
【发布时间】:2016-11-02 18:08:34
【问题描述】:

我有 2 个程序必须相互通信。他们应该共享状态(变量、文件——我不知道如何实现)。 一个程序应该读取它并对更改做出反应 - 另一个程序应该写入这个全局状态。

为此目的使用文件甚至不慢,很难读取某人同时写入的文件。

在程序之间实现这种共享状态的最佳方式是什么? (寻找跨平台解决方案)

【问题讨论】:

  • 您使用什么语言/平台进行编程?这是一条线索:google <lang> <platform> IPC .
  • 这两个程序是您自己编写的吗?你知道如何扩展它们的功能吗?你看过 json 或 XML 吗?
  • 我不知道如何共享状态(有没有类似全局变量的东西,我应该使用文件在程序之间共享状态吗,...)
  • 顺便说一句,是的,我自己编写代码并可以扩展它们
  • 我们在谈论什么平台和语言?正如@JuanTomas 所说,这是通过 IPC 完成的,但 API 的细节取决于语言和平台

标签: cross-platform running-other-programs shared-state


【解决方案1】:

保持两个进程在状态同步的正常方法是使用 IPC(进程间通信)。但是 IPC 可能无法在这里工作,如果您所说的“跨平台”是指例如Linux 上的 python 应用程序与 Windows 上的本机 Windows 应用程序保持同步。在这种情况下,您几乎会被 REST 所困扰,使用 HTTP 来提供 Json、XML 等。

将状态写入网络可访问的临时文件会产生各种问题。更好的是让一个进程充当“服务器”,为“客户端”进程提供状态。当客户端想要更新其状态时,它会向服务器请求当时的最新状态。服务器使用包含最新状态的 Json 或等效对象进行响应。交易是离散的。没有机会在另一个进程正在写入文件时尝试读取文件,或者读取过期的文件。

【讨论】:

  • 所以我必须在一侧设置服务器并从另一侧连接到它。
  • “设置服务器”可能意味着很多事情,其中​​大部分不是我要说的。这个想法是在你的每个程序中使用一个 HTTP 库,这样它们就可以通过 HTTP 进行通信。一个程序维护主状态并侦听 HTTP 请求。另一个在想要更新其状态时发出 HTTP 请求。您不需要安装单独的 Web 服务器或任何东西。只需让您的程序相互使用 HTTP(最好在常规 Web 服务器使用的 80 以外的端口上)。
【解决方案2】:

实现这一点的一个想法是将数据(变量、状态等)导出到 json 文件中,并将其存储在临时文件中。完成此操作后,您可以使用第二个程序读取第一个程序生成的 json 文件并对其进行解析,以便将这些变量分配给第二个程序。

如果您在网络中使用这些程序,那么我建议使用 REST。

XML 和 Json 是跨平台交换信息的格式。您必须确保在两个程序中都有 Json 解析器。

希望对你有帮助。

【讨论】:

  • 是的,它有帮助!问题是,我不能让第一个程序写入文件然后让第二个程序读取,因为它们同时运行。
  • 所以一个程序必须读取另一个程序写入。文件可以这样吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多