在单个进程中运行Apache Thrift /作为外部函数接口

时间:2014-01-19 00:36:00

标签: thrift ffi

Apache Thrift提供传统的RPC,具有不同的客户端和服务器进程。 是否可以将它用作外部函数接口? 这里,单个线程的调用堆栈可以包含客户端和服务器代码。

编辑:这个问题基本上是在一年前提出的: Does Apache Thrift allow foreign function calls between any two languages? 任何更新? 好像所有部分都已经实施了。

1 个答案:

答案 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