Apache Thrift提供传统的RPC,具有不同的客户端和服务器进程。 是否可以将它用作外部函数接口? 这里,单个线程的调用堆栈可以包含客户端和服务器代码。
编辑:这个问题基本上是在一年前提出的: Does Apache Thrift allow foreign function calls between any two languages? 任何更新? 好像所有部分都已经实施了。
答案 0 :(得分:0)
让我回答一下这个问题:究竟是什么让你觉得,这应该是不可能的?
当然,您可以在一个模块,流程,多个流程或计算机中组合服务器和客户端的任意组合。只要能够进行通信,服务器和客户端的位置无关紧要。即使“服务器”和“客户端”(更好的术语是调用者和被调用者)位于同一个线程中 - 在这种情况下你只需使用序列化部分。
您是否有任何特殊问题,您可能想要分享的任何代码都无法正常工作?
简短草图/想法如何运作:
- outer code
- setup a service client using stream transport
- call service client's xxx-send() function
- pass stream/string data to inner module via dedicated function call
- create processor instance
- pass stream data as input, provide another stream for output data
- call to inner code
- return output stream/string data to outer module
- setup a service client using stream transport
- call service client's xxx-recv() function
- return the data
我已经用过约。上面用Delphi和C#概述了75%的部分,我很肯定其余部分也可以解决(瑞士军刀再次出现)。不能说今天Python代码如何支持,或者需要做些什么来实现Python。
更简单的方法如下(注意根本没有界面):
- outer code
- setup a service client using stream transport
- serialize args structure (e.g. union, to support different calls)
- pass stream/string data to inner module via dedicated function call
- deserialize args
- call to inner code
- serialize output struct (again, union to ...)
- return stream/string to outer module
- deserialize the data
- return the data