来自 Python | 的远程过程调用红宝石 | ... 到 C++

Posted

技术标签:

【中文标题】来自 Python | 的远程过程调用红宝石 | ... 到 C++【英文标题】:remote procedure calls from Python | Ruby | ... to C++来自 Python | 的远程过程调用红宝石 | ... 到 C++ 【发布时间】:2014-10-21 02:09:19 【问题描述】:

TL;DR: 是否有框架可以从用 X 语言编写的客户端进程调用用 C++ 编写的服务器进程?我不介意我使用 TCP/IP 或 UDP 或 HTTP 在进程之间进行通信。

详情

我编写了一个用 C++ 编写的实时声音合成器。现在我想将它重写为一个服务器,该服务器从一个单独的客户端进程中获取高级指令(“播放音符”、“停止音符”等)。理想情况下,客户端进程可以用任何语言编写,但我倾向于 Python 或 Ruby。

我已经勾勒出一种处理客户端和服务器之间通信的方法:客户端可以通过管道或套接字发出 JSON 以供声音服务器接收。然后 JSON 将被映射到服务器上的方法调用。很简单。

这开始看起来很像进行 RPC(远程过程调用),但正如我研究过的那样,我只能找到用于“intra-language”RPC 的库(即 C++ 客户端到C++ 服务器)。 inter 语言 RPC 的唯一参考是 Xerox PARC 的 Inter-Language Unification 项目,但最后一次明显的活动是在 2000 年。

另一种选择是使用 RESTful HTTP(或WebSockets)与声音服务器进行通信。有没有我可以用来创建它的轻量级 C++ 框架之类的东西?

注意:对于可以跨多台机器工作的系统,而不仅仅是本地主机的额外功劳。

【问题讨论】:

【参考方案1】:

(如果 SO 给回答自己问题的徽章,我现在已经收集了一堆...)

一位我认为是“编程的绿色贝雷帽”的程序员朋友推荐了 Thrift 并广泛使用它:

https://thrift.apache.org/

来自网页:

用于可扩展的跨语言服务开发的 Apache Thrift 软件框架将软件堆栈与代码生成引擎相结合,以构建在 C++、Java、Python、php、Ruby、Erlang、Perl、Haskell 之间高效无缝工作的服务、C#、Cocoa、javascript、Node.js、Smalltalk、OCaml 和 Delphi 等语言。

接下来展示了一个 Thrift 定义文件的示例,该文件指定了 Java 服务器和 Python 客户端之间的 RPC。正是我一直在寻找的那种东西! (而且我仍然不知道为什么我的 Google 搜索失败了……)

【讨论】:

【参考方案2】:

我认为您正在寻找的是 JSON-RPC:http://json-rpc.org/,或 http://www.jsonrpc.org 中的更新版本

这里列出了多种语言的多个库,每个库的权重各不相同。

【讨论】:

我喜欢 JSON-RPC 的简单性(并且我冒昧地使用指向更新版本的指针来更新您的答案)。 JSON-RPC 不允许您编写一个跨多种语言的定义文件,这就是我倾向于 Thrift 的原因。

以上是关于来自 Python | 的远程过程调用红宝石 | ... 到 C++的主要内容,如果未能解决你的问题,请参考以下文章

从 0 到 1:全面理解 RPC 远程调用

python xmlrpc模块

Python中实现远程调用(RPCRMI)简单例子

Thrift远程过程调用

基于grpc的流式方式实现双向通讯(python)

从0到1:使用 Python 详解 RPC 远程调用