【问题标题】:How to cross-platform remote procedure call in C++ (Linux/Win)如何在 C++ (Linux/Win) 中跨平台远程过程调用
【发布时间】:2012-10-25 12:36:55
【问题描述】:

我希望 linux 主机上的一个应用程序从 VM 中 Win7x64 上的应用程序调用过程。我猜虚拟机在 linux 主机上运行并不重要,因为它应该使用套接字。如何处理这个计划?互联网上有没有这方面的图书馆?

编辑:

好吧,我把它们都看了一遍。 XMLRPC 似乎是 SOAP 的某种前身。在我看来,Prototbuf 似乎专注于大对象的简单序列化。所以我的决定落在了 SOAP 上。但现在我正在寻找一个好用的 c++ 绑定。我阅读了几页 apache axis2 手册,但其他所有内容都很好用,而且无论如何都是用 C 语言编写的。

在我的具体情况下的另一个问题是:发送一些文本数字和参数来识别以文本形式调用和回复的程序是否更容易,因为我知道被调用程序的签名?

编辑2: 由于 SOAP 只是一个标准,而 RPC 只是好奇,(想象一下类似 IP 上的函数指针:D),恕我直言,它们都不是解决方案。但 ZeroMQ 确实是一个进步。

【问题讨论】:

  • 增强了我的答案 DIY 替代方案。但是,在您的情况下,您可以在哪里选择,我会查看具有适合您的许可证的库,然后我会选择最简单的使用,并为您的案例提供最佳示例代码,但是最成熟/稳定,最小。

标签: c++ linux windows cross-platform rpc


【解决方案1】:

RPC 没有魔法。我建议看看 ZeroMQ 和Google protobuf 的组合。 ZeroMQ 是一个非常易于使用的消息传递系统(您的通信层)。您将使用REQ/REP pattern。 Google protobuf 用于描述和序列化/反序列化您的消息。这两个库都是跨平台的,甚至是跨语言的(ruby、python、c++等)

【讨论】:

【解决方案2】:

你看过SOAP吗?它有利有弊,但可能会满足您的需求。

您的 Windows 机器是虚拟机这一事实不应该有什么不同,只要它已启动并运行,并且只要您选择的系统将服务器视为通常逻辑上独立的套接字,您的解决方案将保持灵活。

【讨论】:

    【解决方案3】:

    一个不错的替代方案是 XMLRPC,它运行在 HTTP 之上。至少它比 SOAP 简单。我用它来进行 Java-Python 通信,当时代码不多,但不知道有什么 C++ 库可以推荐,所以我只说 http://en.wikipedia.org/wiki/XML-RPC 及其 C++ 部分。

    编辑问题后编辑:对于一个非常简单的解决方案,只需使用纯 HTTP,将请求路径映射到函数并使用 GET 或 POST 提供参数。尽可能简单地返回 HTTP 响应数据中的值:数字或字符串的纯文本,对于更复杂的返回值,如果可以确保二进制兼容性,则返回二进制 blob(相同的 CPU、相同的字长、普通结构,如果使用编译器结构打包选项需要),或者作为 json(甚至是 XML,但是你开始重新发明 SOAP/XMLRPC...)。

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多