我正在考虑将一些应用程序链接在一起(全部用不同的语言编写,例如C#,C ++,Python),但我不确定如何处理。

链接我的意思是什么?我正在处理的系统由小程序组成,每个程序都负责特定的处理任务。我需要能够轻松地将数据集从一个应用程序转移到另一个应用程序(有问题的数据集不是巨大的,可能是一些兆字节),我还需要某种方式来控制操作的当前状态(这是客户服务器模型响起铃铛)

似乎插座或肥皂可能是一个普遍的解决方案,但只想就人们对此主题的看法提出一些看法。

评论/建议将不胜感激,谢谢!

有帮助吗?

解决方案

我个人喜欢 ØMQ. 。这是一个具有熟悉的BSD sockets界面的库,用于传递消息,但是您会发现它实现了用于分发任务的有趣模式。

听起来您想在管道中安排几个过程。 ØMQ允许您使用推送和轮询插座来做到这一点。 (之后,您会发现甚至可以在几乎没有努力的情况下跨多个过程和机器进行扩展。) 指导 开始, zmq_socket(3) Manpage专门针对推动和拉力的工作方式。

您提到的所有语言都可以使用绑定。

至于消息的内容,Ømq并不关心自己,它们只是原始数据的块。您可以使用任何适合您的格式,例如JSON或 协议缓冲区.

我不确定您提到的“控制状态”。例如,您是否感兴趣,例如在中途取消工作?

其他提示

对于C#到C#您可以使用 Windows Communication Foundation. 。您也可以将其与Python和C ++一起使用。

您可能还需要签名名为Pipes。

我会考虑通过拥有所有应用程序查看的集中数据来移动一个模型,以消除问题。可以说要保留“真理的一个来源”。

由于其用于其符号的名称响应算法,大多数外部软件都在针对C ++代码方面链接时都难以链接。因此,当与其他语言编写的程序接口时,通常最好将包装器声明为事物 extern "C" 或内部 extern "C" { 堵塞。

我需要能够轻松地将数据集从一个应用程序转移到另一个应用程序(所讨论的数据集并不大,可能是一些兆字节)

使用文件系统。

我还需要某种方式来控制操作的当前状态

同样,使用文件系统。带有JSON序列化对象的“ current_state.json”文件非常适合多种语言使用。

似乎插座或肥皂将是一个通用的解决方案。

也许。但这对这种事情来说是过分的。您的操作系统已经拥有所需的所有设施。只需使用文件系统即可。这非常简单且非常可靠。

有很多方法可以进行分解交流。正如您所说,插座可能是通用解决方案。我认为肥皂有点过分。您也可以使用Mailslots。几年前,我使用它编写了C ++应用程序。命名管道也可能是一个解决方案,但是如果您在Windows上进行编码,可能很难。

在我看来:

  1. 插座
  2. Mailslots

是最好的候选人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top