在Apache Thrift C中将流作为属性发送#

时间:2013-04-23 13:16:44

标签: c# streaming thrift

我想在thrift服务中使用一个流,例如,在一个服务方法中有一个流或类似的东西作为方法的参数(例如,能够将结果从IDataReader序列化为一个流,然后反序列化对其他服务器端数据的引用。)

我认为这不是明确可能的,但我想知道是否有另一种方法可以实现类似的目标。

感谢。

1 个答案:

答案 0 :(得分:2)

Apache thrift不支持发送流。你可以得到的最接近的是发送一个字节数组。

要使用thrift实现类似流的体验,您可以创建一个以字节数组的形式返回流的下一部分的接口。

在C#语法中,它看起来像

interface MyService
{     
   int OpenStream(string path);

   byte[] ReadNextBlock(int openedStreamId, long maxBlockSize);

}

OpenStream返回" stream id"在每次调用时传递给ReadNextBlock。在服务器端,您可以保存一个Dictionary(key - openStreamID,value - Stream),用于保持源流打开并从中读取下一个块。

您还可以在客户端创建一个辅助类,它将是Stream后代,并将使用OpenStream和ReadNextBlock来获取实际数据。