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

本文关键字:属性 Apache Thrift | 更新日期: 2023-09-27 18:10:34

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

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

谢谢。

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

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

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

在c#语法中应该是

interface MyService
{     
   int OpenStream(string path);
   byte[] ReadNextBlock(int openedStreamId, long maxBlockSize);
}

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

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