我正在考虑将几个应用程序连接在一起(所有应用程序都用不同语言编写,如C#,C ++,Python),我不知道如何去做。
我的意思是链接?我正在研究的系统由小程序组成,每个程序负责特定的处理任务。我需要能够轻松地将数据集从一个应用程序传输到另一个应用程序(所讨论的数据集不是很大,可能是几兆字节)而且我还需要某种形式来控制操作的当前状态(这是客户端 - 服务器模型响铃的地方)
看起来套接字或SOAP可能是一种通用的解决方案,但只是想对人们对这个主题的看法有所了解。
意见/建议将不胜感激,谢谢!
答案 0 :(得分:2)
我个人喜欢ØMQ。它是一个具有熟悉的BSD套接字接口的库,用于传递消息,但是你会发现它实现了分配任务的有趣模式。
听起来您想要在管道中安排多个流程。 ØMQ允许您使用推送和轮询套接字执行此操作。 (然后,您会发现甚至可以轻松地在多个流程和计算机上扩展。)查看guide以开始使用,zmq_socket(3)手册页专门针对如何推送拉动工作。
绑定适用于您提及的所有语言。
至于消息的内容,ØMQ并不关心它,它们只是原始数据块。您可以使用任何适合您的格式,例如JSON,或者Protocol Buffers。
我不确定的是你提到的'控制状态'。您是否对中途取消工作感兴趣?
答案 1 :(得分:1)
对于C#到C#,您可以使用Windows Communication Foundation。您也可以将它与Python和C ++一起使用。
您可能还想检查命名管道。
答案 2 :(得分:0)
我会考虑转移到一个模型,通过拥有所有应用程序所关注的集中数据来消除问题。保持“事实的一个来源”可以这么说。
答案 3 :(得分:0)
由于其用于符号的名称修改算法,大多数外部软件都无法链接到C ++代码。因此,在与使用其他语言编写的程序进行交互时,通常最好将包装器声明为extern "C"
或extern "C" {
块内的。
答案 4 :(得分:0)
我需要能够轻松地将数据集从一个应用程序传输到另一个应用程序(相关数据集不是很大,可能只有几兆字节)
使用文件系统。
我还需要某种形式的方法来控制操作的当前状态
再次使用文件系统。带有JSON序列化对象的“current_state.json”文件非常适合多种语言使用。
似乎套接字或SOAP可能是一种通用的解决方案。
也许。但对于这种事情来说这太过分了。您的操作系统已具备您需要的所有功能。只需使用文件系统。它非常简单,非常可靠。
答案 5 :(得分:0)
有许多方法可以进行进程间通信。如你所说,套接字可能是一个通用的解决方案。我认为,SOAP有点过分。您也可以使用邮件槽。几年前我用它编写了C ++应用程序。命名管道也可以是一种解决方案,但如果您在Windows上进行编码,则可能很困难。
在我看来:
是最好的候选人。