来自 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++的主要内容,如果未能解决你的问题,请参考以下文章