3

我正在考虑将几个应用程序链接在一起(全部用不同的语言编写,如 C#、C++、Python),但我不知道该怎么做。

我说的链接是什么意思?我正在开发的系统由小程序组成,每个小程序负责特定的处理任务。我需要能够轻松地将数据集从一个应用程序传输到另一个应用程序(所讨论的数据集并不大,可能只有几兆字节)并且我还需要某种形式的方法来控制操作的当前状态(这是客户端-服务器模型敲响警钟的地方)

似乎套接字或 SOAP 将是一个通用解决方案,但只是想就人们对这个主题的看法获得一些意见。

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

4

6 回答 6

2

我个人喜欢ØMQ。它是一个库,具有用于传递消息的熟悉的类似 BSD 套接字的接口,但您会发现它实现了用于分配任务的有趣模式。

听起来您想在管道中安排多个进程。ØMQ 允许您使用推送和轮询套接字来做到这一点。(之后,您会发现甚至可以不费吹灰之力地跨多个进程和机器进行扩展。)请查看入门指南zmq_socket(3) 手册页,专门了解 push 和 pull 的工作原理。

绑定适用于您提到的所有语言。

至于消息的内容,ØMQ 并不关心,它们只是原始数据块。您可以使用任何适合您的格式,例如 JSON 或Protocol Buffers

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

于 2010-12-03T20:04:47.837 回答
1

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

您可能还想签出命名管道。

于 2010-12-03T20:01:42.913 回答
0

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

于 2010-12-03T20:03:13.083 回答
0

大多数外部软件在链接 C++ 代码时遇到了麻烦,因为它对其符号使用了名称修饰算法。出于这个原因,在与用其他语言编写的程序交互时,通常最好将事物的包装器声明为块extern "C"extern "C" {块内。

于 2010-12-03T20:03:57.973 回答
0

我需要能够轻松地将数据集从一个应用程序传输到另一个应用程序(有问题的数据集并不大,可能只有几兆字节)

使用文件系统。

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

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

似乎套接字或 SOAP 将是一个通用的解决方案。

也许。但对于这种事情来说,它是矫枉过正的。您的操作系统已经拥有您需要的所有功能。只需使用文件系统。它非常简单且非常可靠。

于 2010-12-03T20:05:06.077 回答
0

有很多方法可以进行进程间通信。正如您所说,套接字可能是一种通用解决方案。我认为 SOAP 有点矫枉过正。您也可以使用邮槽。几年前,我使用它编写了 C++ 应用程序。命名管道也可能是一种解决方案,但如果您在 Windows 上进行编码,这可能会很困难。

在我看来:

  1. 插座
  2. 邮槽

是最佳人选。

于 2010-12-03T20:15:43.690 回答